Преобразование представления из десятичного числа в числа с плавающей запятой - подводные камни - PullRequest
1 голос
/ 09 ноября 2009

Я работаю над некоторыми функциями в финансовом приложении. Все числа представлены в виде десятичных знаков без ошибок округления как в коде, так и в базе данных. Однако у меня возникли некоторые проблемы с производительностью, и я рассматриваю возможность перехода на числа с плавающей запятой (float / double) в своих собственных вычислениях. Это основано на предположении, что ошибка округления не является проблемой (которую я должен буду уточнить у клиента).

Однако я хотел бы знать, какие есть питфалы, если я сделаю это преобразование. Существует ли тип выражения, которое при вычислении с использованием чисел с плавающей запятой может значительно отличаться от того же выражения, вычисленного с использованием десятичных дробей?

Ответы [ 2 ]

3 голосов
/ 09 ноября 2009

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

Если вы используете float, то максимальное значение, которое вы можете представить правильно, составит $ 167 772,16. Если вы используете double, тогда максимальное значение будет лучше (около 180 триллионов долларов).

Рассматривали ли вы использование прямой int или long (32-битной или 64-битной), представляющих интервалы в 0,01 доллара? Таким образом, вы можете намного лучше контролировать значения, но производительность должна быть хорошей. Вы также можете заключить их в структуру, чтобы их было проще использовать со стандартными математическими операторами.

1 голос
/ 09 ноября 2009

Финансовое приложение обычно является примером номер один, когда не для использования с плавающей запятой. Так что будьте осторожны.

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

...