gpt4 book ai didi

c - double in decimal 和 floating 的精确值?

转载 作者:太空宇宙 更新时间:2023-11-04 07:00:48 24 4
gpt4 key购买 nike

DBL_MAX

179769313486231570814527423731704356798070567525844996598917476803157260
780028538760589558632766878171540458953514382464234321326889464182768467
546703537516986049910576551282076245490090389328944075868508455133942304
583236903222948165808559332123348274797826204144723168738177180919299881
250404026184124858368.000000

但如果我这样做:

double a=1234567890123456789.0;
printf("%f",a);

1234567890123456768.000000

这里的精度是17位。

double a=0.1234567890123456789;
printf("%.20f",a);

0.1234567890123456773

这里也是 float 后17位的精度:

double a=1234567890.1234567890123456789;
printf("%.20f",a);

这将产生:

1234567890.12345671653747558594

现在,精度将是十进制的 10 位 + float 后的 7,即 17。

这是否意味着我只有 17 位数字才能获得 double 的精确值?如果是,为什么DBL_MAX的位数超过300位?

最佳答案

表示 C double 的最常见系统是 IEEE 754 64 位二进制 float 。它是一个 base 2 系统。这意味着可精确表示的数字具有相对较短的二进制表示形式 - 适合 64 位 - 但不一定是短的十进制表示形式。

The exact value of the largest finite number is 2^1024 - 2^971 or 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368

由于数字的粒度,这不是很有用的信息。连续的数字大约相差 10^16.9 的一部分。 For example, the next to largest representable number is 179769313486231550856124328384506240234343437157459335924404872448581845754556114388470639943126220321960804027157371570809852884964511743044087662767600909594331927728237078876188760579532563768698654064825262115771015791463983014857704008123419459386245141723703148097529108423358883457665451722744025579520

您不需要所有这些数字来区分它们。如果您知道自己拥有这些号码之一,那么查看 17 个字符前缀 17976931348623157 和 17976931348623155 就足以分辨出是哪一个。

将 double 字符串转换为十进制字符串的库函数有问题。你应该打印多少位数字?以下是一些选项:

  • 打印出准确的值。几乎总是做错事,因为你会打印出很多没有传达任何有用信息的数字。
  • 打印足够多的数字来区分你从哪个双开始。例如,这是为 Java 的 Double.toString 所做的选择。这允许从打印值中精确恢复 double。
  • 只打印固定数量的数字。生成整洁的报告。

关于c - double in decimal 和 floating 的精确值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38641530/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com