gpt4 book ai didi

c++ - 使用 LONG DOUBLE, "9223372036854775807 - 1"仍然丢弃最后一位数字,结果为 "9223372036854775800"

转载 作者:行者123 更新时间:2023-11-27 23:26:14 25 4
gpt4 key购买 nike

我正在尝试读入两个数字,并显示它们之间的绝对差值。数字变得大得离谱,所以我不得不从 LONG 切换到 LONG DOUBLE 并且只在小数点上以 0 精度显示它们。我的问题是,对于主题中列出的数字,当我将它从字符串的 c_str 扫描成长 double 时,在扫描中最后一位数字被删除,或者更可能是长 double 的显示正在删除它。9223372036854775807 - 1 应该是 9223372036854775806 但它显示的是 9223372036854775800,当我停下来检查其中包含 9223372036854775807 的长 double 时,它只显示“9.223372036” 8547758e+018"

我会把这一切归咎于 2 位处理器,但它似乎在 64 位处理器上仍然打印出错误的答案。有没有人有办法保留整个数字?我的包含被剥离了似乎与 html 解析器混淆的字符。

#include iostream
#include string
#include math.h


using namespace std;

int main () {


string line;
std::getline(std::cin, line);


while ( std::cin )
{

long double n, m, o;


sscanf ((char *)line.c_str(),"%Lf %Lf",&n, &m);

if(n>=m)
{
o = n - m;
}
else
{
o = m-n;
}
char buffer[100000];

sprintf( buffer , "%0.0Lf\0", o);

cout << buffer << endl;
std::getline(std::cin, line);
}


return 0;
}

最佳答案

如果您的编译器支持,我将停止使用 long double 并使用 long long。你说你以前一直在使用 long 所以我不认为你在存储小数部分;如果那是正确的,那么 long long 就是您想要的,而不是 long double。我在 MSVC++ 2010 上用 long long 测试了你的代码,它给出了预期的输出。

正如 Mysticial 指出的那样,double 与当今许多编译器上的 long double 相同。

关于c++ - 使用 LONG DOUBLE, "9223372036854775807 - 1"仍然丢弃最后一位数字,结果为 "9223372036854775800",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9303576/

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