gcc 为什么在整数溢出的情况下,double到int类型转换在x86_64和aarch64中的行为不同?[关闭]

rryofs0p  于 2023-06-06  发布在  其他
关注(0)|答案(1)|浏览(175)

**关闭。**此题需要debugging details。目前不接受答复。

编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将帮助其他人回答这个问题。
2天前关闭。
Improve this question
我有以下示例代码,我正在x86_64和aarch 64平台上编译和执行,但最终得到不同的输出。

#include <iostream>

int main()
{
    double d = 2147483649;
    int i = d;

    std::cout << i << std::endl;

    return 0;
}

x86_64上的输出:-2147483648 aarch 64的输出:2147483647*

为什么两种架构的输出存在差异。在aarch 64的情况下,是否需要传递任何选项给编译器,以使其行为与x86_64的行为一致?
我尝试在两个架构上按照“g++ a.cpp -o a.o”编译代码。我期望在两个架构上返回相同的“i”值。

jtjikinw

jtjikinw1#

这种转换是“未定义行为”,因此编译器可以做任何它想做的事情。
根据[conv.fpint]
浮点类型的纯右值可以转换为整数类型的纯右值。转换截断;即丢弃小数部分。截断后的值无法在目标类型中表示,则行为未定义。

相关问题