На старом форуме была открыта такая тема.
Есть 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 недостаточна, существуют библиотеки с нестандартным представлением чисел. Но по сравнению с упомянутыми типами такие числа обрабатываются ну очень медленно (в сотни и тысячи раз).
Вместо этого результата
Если 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 числа, все остальные варианты недопустимы. В точности, как Вы просили.
Если Вас это не устраивает, потрудитесь тщательнее формулировать свои хотелки.
Сложно сказать “зачем” при математических операциях надо получать точные значения чисел?
Вот нас на военной кафедре учили, что число ПИ в военное время равно четырем. И мы не спрашивали зачем. Если надо значит надо.
Надо поделить между собой 2 целых числа. В результате получить число типа float с точностью 8 разрядов. Я вроде ясно выразился?
Это принципиально невозможно.
Поэтому и вопрос: зачем Вам вдруг понадобилось то, чего быть не может.
Мантисса числа float имеет 23 двоичных разряда. Поэтому если Вам нужно 8 двоичных разрядов - это без проблем. А 8 десятичных разрядов лежат за пределами возможностей чисел типа float.
Ну если числа float не могут быть больше 23 двоичных разрядов, то тогда какие переменные могут быть больше и иметь дробную часть?
Вы что, совсем ответов не читаете?
Я прочитал ваш ответ, что числа Float не могут быть больше. Поэтому и спрашиваю какие могут. Хотя спасибо за ответ. Похоже я нашел. Вместо переменной float есть переменная “Большое число” Сейчас попробую с этой переменной.
Вы уже дважды получили ответ на этот вопрос. Больше повторять не буду.
не поверишь! В ардуинке - никакие.
Точность нужна не для красоты, а с какой-то целью. Иначе это невежество. Это раз. Два - когда в ВУЗ поступал задачки из Сканави решал? Там большая часть не для того, штоп моск ипать, а для того, чтобы знать преобразования. В зависимости от целей вычислений преобразуй выражения так, чтобы уложиться в диапазон значений флоат. Так, чтобы разница была не в 9-ом знаке, а в первом. Этому в совке очень хорошо учили на “приматах” региональных ВУЗов.