gpt4 book ai didi

c++ - 浮点运算的最佳实践

转载 作者:太空狗 更新时间:2023-10-29 23:36:00 26 4
gpt4 key购买 nike

我正在对精确到小数点后第二位的小数输入执行加法和减法。我试图通过乘以 100 将它们转换为整数来提高准确性,但取得了相反的效果。

考虑以下代码和输出:

double d = 2.01;
int a = (int) (d * 100.0);
cout << a << endl;

输出是:

200

一劳永逸,关于浮点运算的一些最佳实践是什么?首先使用上述代码的某些变体将 double 转换为 int,然后再将其转换回去是否可行?

最佳答案

如果将 d*100.0 的结果打印到(比如)20 位小数,问题将很快变得明显:

200.99999999999997

因为它(非常微小地)小于 201,所以当您转换为 int 时它会被截断为 200。

明显的解决方法是强制舍入。至少如果你的输入都是正的,那么就可以像在结果上加 0.5 一样简单:

int a = (int)(d*100.0 + 0.5);

如果您可以指望您的编译器支持它,那么使用标准库的 round 会更容易:

long a = lround(d*100.0);

这对正数和负数都有效。

关于c++ - 浮点运算的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24665459/

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