gpt4 book ai didi

c++ - 为什么一个简单的 C++ 程序会出现错误的结果?是#define引起的吗?

转载 作者:行者123 更新时间:2023-12-03 12:48:32 25 4
gpt4 key购买 nike

我能否知道t_temp的输出是1.47123e+9而不是3.1536e+10的原因是什么(t)?

程序代码为:

#include<iostream>
using namespace std;
#define asd 86400

int main()
{
double t, t_temp;

t = 31536000000;
t_temp = 365000 * asd;

cout << t << endl;
cout << t_temp << endl;

return 0;
}

最佳答案

当您使用整数值计算表达式时,它会转换为 int32_t 类型,并且结果大于 2^32。您需要将至少一个操作数转换为更高类型。

#include<iostream>
#include<numeric>
using namespace std;

#define asd 86400

int main()
{
cout << std::numeric_limits<int32_t>::max()<<endl;//2147483647
int16_t Int16Res = 365000 * asd;//Int16Res int16_t 11264
int32_t Int32Res = 365000 * asd;//Int32Res int32_t 1471228928
int64_t Int64Res1 = 365000 * asd; //Int64Res1 int64_t 1471228928
int64_t Int64Res2 = uint64_t(365000) * asd; //Int64Res2 int64_t 31536000000

double t, t_temp;
t = 31536000000;
t_temp = 365000.0 * asd;//t_temp double 31536001024
cout << t_temp << endl;
return 0;
}

关于c++ - 为什么一个简单的 C++ 程序会出现错误的结果?是#define引起的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49873930/

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