Проблема с большими числами FLOAT

На старом форуме была открыта такая тема.
Есть 2 целых числа. При делении одного числа на другое получаем число типа “FLOAT” Точность деления составляет 6-7 знаков. Есть ли какие нибудь библиотеки обойти данное ограничение?
Получить Например: 10000000/30000000=0,3333333333
Стандартная операция деления выдает 0,3333333492

а если так? 10000000/30000

Но, лучше бы Вы объяснили зачем Вам это. Существует крайне мало случаев, когда это действительно нужно. В остальных случаях народ этого хочет просто от непонимания ситуации.

Какое именно ограничение вы хотите обойти?

Евгений Петрович, опять за Вами «косяк». Ни плата, ни «ограничения» точно не обозначены.
Или я гоню на фоне пятницы 13го))

unsigned long N,M;
Надо посчитать переменную
F=(float)(1.0*16000000/M)*N;

Если N=10000384 а M=16000613 то F=10000002.0
Если N=10000384 а M=16000614 то F=10000000.0
Если N=10000384 а M=16000615 то F=10000000.0

Непонятно существо проблемы.
Вещественные числа всегда могут быть представлены только с погрешностью. Это следует из того простого факта, что количество вещественных чисел континуально, а количество чисел внутри компьютера - конечно.
На практике существует несколько разных представлений вещественных чисел, различающихся величиной относительной погрешности, в частности: float, double и long double.
Если точность long double недостаточна, существуют библиотеки с нестандартным представлением чисел. Но по сравнению с упомянутыми типами такие числа обрабатываются ну очень медленно (в сотни и тысячи раз).

1 лайк

Вместо этого результата
Если N=10000384 а M=16000613 то F=10000002.0
Если N=10000384 а M=16000614 то F=10000000.0
Если N=10000384 а M=16000615 то F=10000000.0
Мне надо получить этот результат
Если N=10000384 а M=16000613 то F=10000000.9
Если N=10000384 а M=16000614 то F=10000000.3
Если N=10000384 а M=16000615 то F=9999999.6

И все?
Тогда просто:
if(M==16000613) { F=10000000.9}
else if(M==16000614) { F=10000000.3}
else { F=10000000.3}
Только подобрать для F тип способный хранить указанные значения, например double.

Да и всего то.
Только N меняется в диапазоне от 1 до 60000000, а M меняется в диапазоне от 16000001 до 32000000.

Да, какая разница? Человек хочет, что вместо 0,3333333492 получалось 0,3333333333. У меня вопрос, зачем? Безотносительно всего остального.

Это в корне противоречит тому, что Вы писали в сообщении №8. Там Вы просили только 3 числа, все остальные варианты недопустимы. В точности, как Вы просили.
Если Вас это не устраивает, потрудитесь тщательнее формулировать свои хотелки.

1 лайк

Сложно сказать “зачем” при математических операциях надо получать точные значения чисел?
Вот нас на военной кафедре учили, что число ПИ в военное время равно четырем. И мы не спрашивали зачем. Если надо значит надо.

Надо поделить между собой 2 целых числа. В результате получить число типа float с точностью 8 разрядов. Я вроде ясно выразился?

Это принципиально невозможно.
Поэтому и вопрос: зачем Вам вдруг понадобилось то, чего быть не может.

Мантисса числа float имеет 23 двоичных разряда. Поэтому если Вам нужно 8 двоичных разрядов - это без проблем. А 8 десятичных разрядов лежат за пределами возможностей чисел типа float.

Ну если числа float не могут быть больше 23 двоичных разрядов, то тогда какие переменные могут быть больше и иметь дробную часть?

Вы что, совсем ответов не читаете?

Я прочитал ваш ответ, что числа Float не могут быть больше. Поэтому и спрашиваю какие могут. Хотя спасибо за ответ. Похоже я нашел. Вместо переменной float есть переменная “Большое число” Сейчас попробую с этой переменной.

Вы уже дважды получили ответ на этот вопрос. Больше повторять не буду.

не поверишь! В ардуинке - никакие.
Точность нужна не для красоты, а с какой-то целью. Иначе это невежество. Это раз. Два - когда в ВУЗ поступал задачки из Сканави решал? Там большая часть не для того, штоп моск ипать, а для того, чтобы знать преобразования. В зависимости от целей вычислений преобразуй выражения так, чтобы уложиться в диапазон значений флоат. Так, чтобы разница была не в 9-ом знаке, а в первом. Этому в совке очень хорошо учили на “приматах” региональных ВУЗов.

1 лайк