Недавно я работал с System.Numerics.Complex
, и я начал замечать типичный «дрифт» с плавающей запятой, где накопленное значение вычисляется на десятую часть миллионного или что-то в этом роде, которое хорошо известно и распространено с типом float
и даже с типом double
. Я просмотрел структуру Complex и, конечно же, использовал переменные double
. Почему он использует значения double
для хранения своих данных, а не значения decimal
, которые предназначены для предотвращения этого? Как мне обойти это?Почему System.Numerics.Complex использует удвоение вместо десятичных знаков?
0
A
ответ
2
Чтобы ответить на ваш вопрос:
double
s несколько порядков быстрее, поскольку операции выполняются на аппаратном уровне- база-2 поплавки могут быть болееточным для больших вычислений, так как при сдвиге вверх и вниз меньше «колебания»: 1 бит точности меньше 1 десятичной цифры. Более того, base-2 может использовать неявный ведущий бит, что означает, что они могут представлять больше чисел, чем другие базы.
- комплексные номера обычно используются для научных/инженерных приложений, где небольшие относительные ошибки около 10 -16 перевешиваются другими источниками ошибок (например, из-за измерения или модели).
- знаков после запятой, с другой стороны, как правило, используются для операций «учет» типа, где ошибки округления является обычно незначительными (т.е. добавлением небольших чисел, умножения целых чисел и т.д.)
Смежные вопросы
- 1. Удивительно, почему книга, которую мы используем, использует удвоения и десятичные знаки вместо десятичных знаков.
- 2. MySQL: Хранение десятичных знаков?
- 3. Предотвращать делать десятичных знаков
- 4. Замена десятичных знаков
- 5. Изменение числа десятичных знаков
- 6. результат десятичных знаков javascript
- 7. Regex заменить десятичных знаков
- 8. SQL число десятичных знаков
- 9. Получить длину десятичных знаков
- 10. Сравнение двух десятичных знаков
- 11. wkhtmltopdf процент десятичных знаков
- 12. Округление десятичных знаков Python
- 13. Круглое число десятичных знаков
- 14. Сокращение десятичных знаков в Delphi
- 15. Сравнение десятичных знаков в python
- 16. Почему java.awt.Dimension использует удвоение по высоте и ширине?
- 17. Ограничение числа десятичных знаков двойного
- 18. Простой ответ без десятичных знаков
- 19. bigdecimal и число десятичных знаков
- 20. Алгоритм определения повторяющихся десятичных знаков?
- 21. Отображение чисел без десятичных знаков
- 22. Создать матрицу без десятичных знаков
- 23. Удаление десятичных знаков с цифр
- 24. Обнаружение десятичных знаков в vim
- 25. Сравнение десятичных знаков в PHP
- 26. Форматирование валюты без десятичных знаков
- 27. Игнорирование десятичных знаков в VB
- 28. Повторение десятичных знаков в PHP
- 29. Форматирование десятичных знаков без округления
- 30. Печать десятичных знаков в C++
'decimal' не предназначенные для предотвращения дрейфа. Он предназначен для представления точно десятичных значений. Тот факт, что он использует 128 бит, может сделать дрифт более приемлемым для вас, но дополнительная точность достигается за такую производительность, что дизайнеры считают, что большинство будет лучше обслуживаться «сложным» типом на основе «double». –
Природа не считается с 10 пальцами, только люди делают. –
. Десятичный индекс .NET также имеет довольно небольшой показатель (в десятичном, он называется «шкала») диапазона, более или менее между 10^28 и 10^-28. Двойной имеет гораздо больший диапазон. –