Во многих ответах на этот вопрос обсуждается IEEE и стандарты, касающиеся арифметики с плавающей запятой.
Исходя из не-компьютерных знаний (физика и инженерия), я склонен смотреть на проблемы сдругая перспектива.Для меня причина, по которой я бы не использовал double или float в математических вычислениях, заключается в том, что я потерял бы слишком много информации.
Какие есть альтернативы?Их много (и многие другие, о которых я не знаю!).
BigDecimal в Java является родным языком Java.Apfloat - это еще одна библиотека произвольной точности для Java.
Десятичный тип данных в C # - это альтернатива Microsoft .NET для 28 значащих цифр.
SciPy (Scientific Python), вероятно, также может обрабатывать финансовые расчеты (Я не пробовал, но подозреваю, что это так).
Библиотека многократной точности GNU (GMP) и библиотека GNU MFPR - это два бесплатных ресурса с открытым исходным кодом для C и C ++.
Есть также библиотеки числовой точности для JavaScript (!), И я думаю, что PHP может обрабатывать финансовые расчеты.
Есть также проприетарные (особенно, я думаю, для Fortran) и решения с открытым исходным кодом для многих компьютеров.языки.
По образованию я не ученый.Однако я склоняюсь к BigDecimal в Java или к десятичному в C #.Я не пробовал другие решения, которые я перечислил, но они, вероятно, тоже очень хороши.
Мне нравится BigDecimal из-за методов, которые он поддерживает.Десятичная запятая в C # очень хороша, но у меня не было возможности работать с ней столько, сколько хотелось бы.В свободное время я делаю научные расчеты, которые меня интересуют, и BigDecimal, кажется, работает очень хорошо, потому что я могу установить точность своих чисел с плавающей запятой.Недостаток BigDecimal?Время от времени это может быть медленным, особенно если вы используете метод разделения.
Для скорости вы можете заглянуть в бесплатные и проприетарные библиотеки на C, C ++ и Fortran.