gpt4 book ai didi

c++ - 为什么不能从 max double 中减去 1

转载 作者:太空狗 更新时间:2023-10-29 20:02:09 25 4
gpt4 key购买 nike

#include <iostream>
#include <limits>

int main()
{
double d = std::numeric_limits<double>::max();
std::cout << std::to_string(d) << std::endl;
std::cout << std::to_string(d - 1) << std::endl;
}
[test@arch_host ~]$ g++ test.cpp [test@arch_host ~]$ ./a.out 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000

为什么第二个不以 7 结尾?

最佳答案

double 使用 IEEE 754 标准表示。与 int 不同,没有固定的最小步长 1。数字越大,最小步长就越大: enter image description here

您的数字的值太大以至于步长比 1 大得多。为简单起见,我们假设它是 10。因此,如果您尝试减去 1,该值将四舍五入到下一个有效的 double 。这和以前一样。

Or with other words: 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858367 is not a valid double.

关于c++ - 为什么不能从 max double 中减去 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45907812/

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