Обычно это основано на значимых показателях как показателя степени, так и значимости в базе 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.
Причина, по которой он называется a, 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 )