gpt4 book ai didi

c++ - 将 float 与小数点后三位进行比较

转载 作者:太空狗 更新时间:2023-10-29 19:38:38 24 4
gpt4 key购买 nike

我想知道将 float 与小数点后三位进行比较的最快方法是什么。假设我有这样的东西

float lhs = 2.567xxxx
float rhs = 2.566xxxx

上面应该是不同的,如果是这样的话

float lhs = 2.566xxxx
float rhs = 2.566xxxx

他们应该是一样的

更新:

我正在尝试以下操作

double trunc(double d)
{
return (d>0) ? floor(d) : ceil(d) ;
}


bool comparedigits(float a , float b)
{
if (trunc(1000.0 * a) == trunc(1000.0 * b))
{
return true;
}
return false;
}

float g = 2.346;
float h= 2.34599;
bool t = comparedigits(g,h) ; //Not the same and should return false;

但是它返回 true。

最佳答案

为了阻止错误答案的冲击,因为它们允许四舍五入来改变结果,这里有一个没有四舍五入问题的答案,因为它使用 double 进行算术运算:

trunc(1000. * lhs) == trunc(1000. * rhs);

这是有效的,因为 1000. 的类型是 double,所以另一个操作数从 float 转换为 double ,并且乘法以 double 格式执行。 1000 与任何 float 值的乘积都可以在 double 中精确表示,因此没有舍入错误(假设 IEEE 754 32 位和 64 位二进制 float ) .然后我们使用 trunc 比较小数点后(原始)第三位的数字。

我犹豫是否提供这个答案,因为我不确定这是 OP 真正想要的。通常当人们带着比较“精确到小数点后三位”的请求来到 Stack Overflow 时,他们并没有完全想清楚这个问题。一个完整的正确答案可能要等到我们得到澄清。

此外,以上仅适用于正数。如果值可能为负,则应先对它们的符号执行测试,如果它们不同,则应返回 false。 (否则,–.0009 将被报告为等于 +.0009。)

关于c++ - 将 float 与小数点后三位进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18686269/

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