В нормированном представлении двойной точности, думая «1». «1.f» в дробной части приводит к уменьшению максимального значения sprintf
с 8192 до 8190.
Теперь;
identical(.Machine$double.xmax, (2-2^(-52))*2^1023) # TRUE
sprintf("%.8190f", .Machine$double.xmax)
# Error in sprintf("%.8190f", .Machine$double.xmax) : required resulting string length 8500 is greater than maximal 8192
sprintf("%.8190f", (2-2^(-52))*2^1023)
# Error in sprintf("%.8190f", (2 - 2^(-52)) * 2^1023) : required resulting string length 8500 is greater than maximal 8192
sprintf("%.8190f", .Machine$double.xmax- 10^308)
# Error in sprintf("%.8190f", .Machine$double.xmax - 10^308) : required resulting string length 8499 is greater than maximal 8192
sprintf("%.7882f", -.Machine$double.xmax)
# Error in sprintf("%.7882f", -.Machine$double.xmax) : required resulting string length 8193 is greater than maximal 8192
sprintf("%.7881f", -.Machine$double.xmax) # Seamlessly shows the result.
(2-2 ^ (- 52)) 2 ^ 1023 ≈ 1797693 x 10 ^ 308. Итак, где же это 8500 в
sprintf
выход материализуется из?
Кроме того, значение sprintf
равно: Символьный вектор длины, который соответствует длине самого длинного ввода. Если какой-либо элемент fmt или любой символьный аргумент объявлен как UTF-8, элемент результата будет в UTF-8 и будет иметь кодировку, объявленную как UTF-8. В противном случае он будет в кодировке текущей локали.
Итак, sprintf
кажется не , чтобы дать 64-битное представление с плавающей запятой двойного приоритета для числового значения?