我对 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/