如何确定double的最大精度

Shi*_*nha 14 java floating-point precision double

我试图确定双精度的最大精度是多少.在此链接中的已接受答案的注释中,在Java中保留精度为double @PeterLawrey表示最大精度为15.

你怎么决定这个?

use*_*421 9

@PeterLawrey表示最高精度为15.

这实际上不是他所说的.他说的是:

double有15位小数的精度

而他错了.它们具有15位十进制数字的精度.

任何数字中的小数位数由其日志给予基数10. 15是log 10(2 53 -1)的最低值,其中53是尾数的位数(包括隐含位),如因此,在Javadoc和IEEE 754中描述的和2 53 -1是最大可能的尾数值.实际值是15.954589770191003298111788092734到Windows计算器的限制.

将它描述为"精确度的小数位"是完全错误的.如果A 都在小数点之前,则它double具有15个十进制数字的精度.对于具有小数部分的数字,由于十进制和二进制分数的不可通约性,您可以在十进制表示中获得多于15位的数字.

  • "直对数参数"仅适用于整数,这可能就是你在上一段中所说的.对于浮点数,你必须像我在这里做的推导:http://www.exploringbinary.com/number-of-digits-required-for-round-trip-conversions/.对于双打,你会得到相同的答案(15); 对于浮点数,log_10(2 ^ 24-1)约为7.22,但最大精度为6.(另请参见http://stackoverflow.com/questions/30688422/is-the-most-significant-decimal-digits-precision - 可以转换为二进制.) (2认同)