我对 vector 进行了归一化,其长度应为1。但是length方法的结果为0.99999982

我不知道这是对还是错。但是,如果我将其打印出来,结果是1。不是0.99999982(由cout打印)

但是std::cout如何知道它是1? [这是我的第一个问题]

另一个问题是为什么比较函数的结果为假。

我有一个比较方法如下。 lhs是 vector 的长度,而rhs仅为1。
return (fabsf(rhs-lhs) <= FLT_EPSILON) ? true : false;
该方法的结果为假。

归一化 vector 的长度是否已经被错误地视为归一化?还是epsilon太小?

我怎么了

最佳答案

IEEE标准要求加,减,乘和除的结果必须精确舍入。结果必须是rounded to the nearest floating-point number。浮点误差累积在归一化 vector 所需的许多运算符中。
像其他海报一样,FLT_EPSILON太小。

关于c++ - 浮点数值错误。 c++如何知道0.99999982是1?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7494260/

10-11 17:57