Как выполнять математику с фиксированной точкой вместо чисел с плавающей точкой?

Я не дядя по математике, но настоящий мне сказал вот что:

"использовать фиксированную точку вместо плавающей для умножения, деления, суммирования, тригонометрии и интегрирования"

Итак, что мне делать вместо использования типов данных double или float? Есть ли у кого-нибудь удобный фрагмент или ссылка, показывающая разницу для дядей, не являющихся математиками?


person Proud Member    schedule 01.04.2011    source источник
comment
Большинство библиотек с фиксированной точкой не выполняют триггеры или вычисления.   -  person Ignacio Vazquez-Abrams    schedule 01.04.2011
comment
В чем причина использования расчета с фиксированной точкой? Вы надеетесь сделать ваше приложение быстрее?   -  person Georg Schölly    schedule 01.04.2011
comment
Я думаю, что ваш вопрос здесь правильный, но не очень хорошо сформулирован ...   -  person slycrel    schedule 02.04.2011


Ответы (3)


Проверьте ссылку ниже для фиксированной точки, я уверен, что она будет вам полезна ...

http://cnx.org/content/m11054/latest/

http://www.digitalsignallabs.com/fp.pdf

person Jhaliya - Praveen Sharma    schedule 01.04.2011
comment
Вот еще одно исправленное seattlerobotics.org/encoder/200008/fixedpoint.html vs Float dspguide.com/ch28/4.htm - person Jhaliya - Praveen Sharma; 01.04.2011

Сам язык не поддерживает ничего, кроме целых чисел и значений с плавающей запятой. Однако вы можете легко моделировать значения фиксированной точки с помощью целых чисел. Если вы, например, решили, что вам нужно значение фиксированной точки с тремя десятичными знаками, вы можете использовать, например, 12345 для представления 12,345. Сложить просто, и вы наверняка поймете, как выразить другие основные операции.

Однако нет поддержки для выполнения тригонометрии и т. Д.

person Lindydancer    schedule 01.04.2011

Кто бы ни был «дядей-математиком», он ошибается.

Если вы действительно не понимаете, что делаете, любая реализация фиксированной точки, которую вы придумаете, не будет более точной при использовании собственной двойной точности и системной математической библиотеки. Если бы вы действительно понимали, что делаете, вы бы не задавали вопрос.

Так что не беспокойся об этом. Используйте 1_. Если вы столкнетесь с проблемами точности, сначала разберитесь в них и беспокойтесь о том, как их избежать, только после того, как поймете.

person Stephen Canon    schedule 02.04.2011
comment
Учитывая, что вы не знаете область его проблемного пространства и размеры задействованных чисел, похоже, что вы не сможете сделать окончательное заявление о том, нужны ли ему объекты с фиксированной точкой или нет. - person aperkins; 26.05.2011
comment
Согласен с аперкинсом. Можно достичь более высокой точности с 64-битным целым числом, чем с двойным, если мы выделим больше битов для десятичной части. - person user172818; 07.02.2012
comment
@ user172818: конечно можно. Однако число с плавающей запятой не обязательно означает двойное. Большинство серийного оборудования поддерживает 80-битные числа с плавающей запятой (с точностью 64 бита с правильным округлением, чего нет в целочисленном оборудовании). Существуют хорошие библиотеки с плавающей запятой произвольной точности, которые могут предоставлять результаты с любой желаемой точностью. Я не говорю, что для фиксированной точки нет места - я говорю, что наивное использование фиксированной точки может привести к возникновению тонких ошибок, поэтому вы не должны использовать ее только потому, что так сказал дядя-математик. - person Stephen Canon; 07.02.2012