что я понимаю здесь, так это то, что десятичная дробь занимает больше места, но обеспечивает более короткий диапазон?
Правильно. Это обеспечивает более высокую точность и меньший диапазон. Очевидно, что если у вас ограниченное количество битов, вы можете увеличить точность только уменьшив диапазон!
все согласны с тем, что десятичная дробь должна использоваться, когда требуется точность
Поскольку это утверждение является ложным - в частности, я не согласен с ним - любой вывод, который вы из него сделаете, не является правильным.
Цель использования десятичной дроби - не более высокая точность. Это меньшая ошибка представления . Более высокая точность является одним из способов достижения меньшей ошибки представления, но десятичная дробь не достигает своей меньшей ошибки представления, будучи более высокой точностью. Он достигает своей меньшей ошибки представления с помощью , точно представляющей десятичные дроби .
Десятичный знак - для тех сценариев, в которых ошибка представления десятичной дроби должна составлять ноль , например при финансовых вычислениях.
Кроме того, при выполнении вычисления, подобного = (1/3) * 3, результат желания равен 1, но только с плавающей запятой и удвоением дают мне 1
Тебе повезло. Есть много дробей, где ошибка представления этих вычислений не равна нулю как для чисел с плавающей точкой, так и для двойных.
Давайте быстро проверим, сколько их. Мы просто сделаем миллион рационалов и посмотрим:
var q = from x in Enumerable.Range(1, 1000)
from y in Enumerable.Range(1, 1000)
where ((double)x)/y*y != x
select x + " " + y;
Console.WriteLine(q.Count()); // 101791
Более 10% всех рациональных чисел с малыми числами представлены в виде двойных чисел с достаточно большой ошибкой представления, что они не превращаются в целые числа при умножении на их знаменатель!
Если вы хотите сделать точную арифметику с произвольными рациональными числами, то ни двойной, ни десятичный не подходят для использования. Используйте большую рациональную библиотеку, если вам нужно точно представлять рациональные числа.
почему десятичная дробь точнее?
Десятичная дробь более точная, чем двойная, потому что она имеет больше битов точности.
Но опять же, точность на самом деле не так уж важна. Важно то, что десятичное число имеет меньшую ошибку представления , чем двойное для многих распространенных дробей.
Он имеет меньшую ошибку представления, чем двойную, для представления дробей с небольшой степенью десяти в знаменателе, поскольку он был разработан специально , чтобы иметь нулевую ошибку представления для всех дробей с небольшой степенью десяти в знаменателе ,
Вот почему он называется "десятичным", потому что он представляет собой дроби со степенью десяти . Она представляет собой десятичную систему , которая является системой, которую мы обычно используем для арифметики.
Double, напротив, был явно не предназначен для небольшой ошибки представления. Double был разработан, чтобы иметь диапазон, точность, ошибку представления и производительность, которые подходят для физических вычислений.
В физике нет смещения к точным десятичным величинам. Есть такой уклон в финансах. Используйте десятичные дроби для финансов. Используйте двойники для физики.