gpt4 book ai didi

c++ - 使用来自不同库的相同函数的不同结果

转载 作者:可可西里 更新时间:2023-11-01 17:34:34 26 4
gpt4 key购买 nike

这是一些代码:

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
long long int a, b;
long long int c;

cin >> a >> b;

c = abs(a) + abs(b);
cout << c;
cout << endl;
}

当我输入 10000000000000000002 时应该返回 1000000000000000002

如果我尝试使用 cmath 执行此操作,它将返回 1000000000000000000,但如果我使用 cstdlib,它将返回 10000000000000000002。为什么会发生这种情况?

还考虑到我正在使用 cmath,它不应该工作得更合适吗?

我正在使用 Linux Mint 18.2 64 位,Eclipse 平台。

最佳答案

cmath 版本是 float one .所以当你只有那个时,你实际上是在 float 上进行计算并在最后转换回一个 long long。浮点精度不足以容纳 18 位数字,+2 会丢失。

cstdlib 版本是 integer one .这给出了预期的结果。

正如评论中所指出的,在 C++11 中,cmath 还定义了一个接受整数的 abs 版本。但是,“这些重载在计算之前有效地将 x 转换为 double (为 T 定义为任何整数类型)”

我相信如果您使用 -Wall -Wextra 或类似的标志,而只包含 cmath,您的编译器应该会向您发出转换警告。

关于c++ - 使用来自不同库的相同函数的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45651781/

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