gpt4 book ai didi

c - 关于 float 和 float ×整数的溢出题

转载 作者:太空宇宙 更新时间:2023-11-04 02:19:13 25 4
gpt4 key购买 nike

1)这是不可溢出的吗?

long long v1, v2, result;
[..]
result = ((long double) v1 / v2) * 1000000LL;

1.a) 我可以省略常量上的 LL 吗?为什么。

2) 或者这个没有 float 的变体可以吗?

long long l1, l2, result;
[..]
result = (1000000 * (v1 / v2) + v1 % v2);

2.a) 哪个有更多的开销?第一个还是这个例子?

3) float 是否会溢出,或者只是包装成“合理”的值?

最佳答案

是的,如果 v1 = 1000000000000000 且 v2 = 1,示例 (1) 中的结果很容易溢出。您不需要该常量的 LL,因为它足够小以适合 int (在大多数情况下,在任何情况下)。

(2) 如果 v1 和 v2 与我给定的一样,那么它会像示例 1 一样溢出。

第一个示例更昂贵,因为浮点运算比整数运算更昂贵。

(3) float 肯定会溢出,其后果取决于具体实现。

正如 Arjit 所指出的,您可以通过在执行计算之前检查 v1 的值来防止溢出。如果 v1 可能是负数,您还需要检查负数版本,也许以下可能会更好......

if ((LONG_LONG_MAX / 1000000) > V1)
{
...
}

如果您真的遇到限制,您可以通过将变量声明为unsigned 来为自己留出更多空间。

稍后 - 编辑以纠正 Arjit 指出的错误。

关于c - 关于 float 和 float ×整数的溢出题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3438476/

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