Обычно оно основано на значимых показателях как показателя степени, так и значения в основании 2, а не на основании 10. Однако из того, что я могу сказать в стандарте C99, нет определенной точности для чисел с плавающей запятой и двойных чисел (кроме того факта, что1 и 1 + 1E-5
/ 1 + 1E-7
различимы [float
и double
репрезентативно]).Тем не менее, количество значащих цифр оставлено на усмотрение разработчика (а также то, какую базу они используют внутри, поэтому, другими словами, реализация может принять решение сделать это на основе 18 цифр точности в базе 3).[1]
Если вам необходимо знать эти значения, константы FLT_RADIX
и FLT_MANT_DIG
(и DBL_MANT_DIG
/ LDBL_MANT_DIG
) определены в файле float.h.
причина, по которой он называется double
, заключается в том, что количество байтов, используемых для его хранения, вдвое больше числа с плавающей запятой (но это включает как показатель степени, так и значение).Стандарт IEEE 754 (используемый большинством компиляторов) выделяет относительно больше битов для значения и, чем показатель степени (от 23 до 9 для float
против 52 до 12 для double
), поэтому точность более чем удваивается.
1: раздел 5.2.4.2.2 (http://www.open -std.org / jtc1 / sc22 / wg14 / www / docs / n1256.pdf )