общепринятая формула для определения количества десятичных цифр, которое мы можем сохранить в формате с плавающей запятой без ошибки усечения.
Исследования FLT_DIG, DBL_DIG, LDBL_DIG
. Это количество значащих десятичных цифр (как в текст ), которые можно округлить до типа с плавающей запятой и обратно для float, double, long double
.
С двоичными базами и для обобщения для OP используйте
floor((significant_bits - 1) log10(base))
С base == 2
и символом significant_bits == 5
бит (4 явно кодированных, 1 подразумевается), это floor(1.204...)
или 1
.
Это означает с десятичными числами вида w.000 * 10 power , all комбинации w
(1
- 9
) и power
( в минимальном / максимальном диапазоне) будет "круговая передача" от десятичного текста до OP_s_Floating_point_type до десятичного текста успешно.
Если попытаться выполнить обратный десятичный текст вида w.y00 * 10 power , для некоторой комбинации w,y
произойдет сбой. Это не означает, что все комбинации этой формы потерпят неудачу, только некоторые.
Попробуйте взять десятичный текст "9.0", "9.1", "9.2", ... "9.9" и преобразовать эти 10 в формат FP OP. В диапазоне 9 этот формат поддерживает только кодирование 9.0 и 9.5. Таким образом, сопоставление этих 10 чисел приведет к 2 разным числам FP. Конечно, преобразование этих 2 обратно в десятичную форму дает только 2 разных ответа. Туда и обратно не удалось 8 из 10 человек.
если я что-то упускаю.
Есть ли способ определить десятичную точность для мантиссы любого размера?
Значение 1, полученное из приведенной выше формулы, представляет собой наихудший случай , а наихудший случай - это число, которое обычно указывается для десятичная точность .