Я поговорю конкретно о двойниках IEEE754, поскольку, как я думаю, вы просите.
Двойники определяются как знаковый бит, 11-битная экспонента и 52-битная мантисса , которые объединяются в 64-битное значение:
sign|exponent|mantissa
Биты экспоненты хранятся в смещенном формате, что означает, что мы сохраняем фактическую экспоненту +1023 (для двойного). Показатель «все нули» и показатель «все единицы» являются особыми, поэтому в конечном итоге мы можем представить показатель в диапазоне от 2 ^ -1022 до 2 ^ + 1023
Это распространенное заблуждение, что целочисленные значения не могут быть представлены точно в виде двойных чисел, но мы можем фактически сохранить любое целое число в [0,2 ^ 53) точно , правильно установив мантиссу и экспоненту, фактически диапазон [2 ^ 52,2 ^ 53) может только хранить целочисленные значения в этом диапазоне. Таким образом, 10 легко хранить точно в двойном числе.
Когда дело доходит до умножения двойных чисел, у нас фактически есть два числа этой формы:
A = (-1)^sA*mA*2^(eA-1023)
B = (-1)^sB*mB*2^(eB-1023)
Где sA, mA, eA - знак, мантисса и показатель степени для A (и аналогично для B).
Если мы умножим их:
A*B = (-1)^(sA+sB)*(mA*mB)*2^((eA-1023)+(eB-1023))
Мы можем видеть, что мы просто sum экспоненты, а затем умножить мантиссы. На самом деле это не плохо для точности! Мы можем переполнить биты экспоненты (и, таким образом, получить бесконечность), но в остальном нам просто нужно округлить промежуточный результат мантиссы до 52 бит, но в худшем случае это изменит только младший значащий бит в новой мантиссе.
В конечном итоге ошибка, которую вы увидите, будет пропорциональна величине результата. Но у двойников есть ошибка, пропорциональная их величине в любом случае , так что это действительно настолько безопасно, насколько мы можем получить. Способ приблизить ошибку в вашем числе как | величина | * 2 ^ -53. В вашем случае, поскольку 10 является точным , единственная ошибка возникнет в представлении числа pi. Он будет иметь ошибку ~ 2 ^ -51, и, следовательно, результат будет также.
Как правило, я считаю, что двойные числа имеют ~ 15 цифр с точностью десятичной при мышлении о проблемах точности.