gpt4 book ai didi

c++ 测试 double * double 是否会溢出 uint64_t

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

bool multiply_overflow_double(double a,double b)
{
double v = a * b;
if (std::isfinite(v))
return (v > std::numeric_limits<uint64_t>::max());
return true;
}

我得到了两个 double ,我需要检查它是否会溢出 uint64_t。我确实考虑过使用除法的传统方式,但这似乎更简单。

与传统方法相比,如果 a 和 b 大于 0,有哪些明显的问题?

最佳答案

这对 IEEE754 是危险的 double因为并非所有大于 2 的 53 次方的整数都可以精确表示,所以 a * b可能会被截断为比实际产品更小的值。因此你的 return可能会给你假阴性。其他 double计划也会受到类似的影响。

另请注意 std::numeric_limits<uint64_t>::max()将转换为 double太 - 对于 IEEE754 你会得到 18446744073709551616而不是 18446744073709551615 .

传统的除法检查不会受到这些影响。

关于c++ 测试 double * double 是否会溢出 uint64_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49857304/

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