c++ - float 错误。 c++怎么知道0.99999982是1?

标签 c++ floating-point epsilon

我归一化了一个 vector ,它的长度应该是1。但是长度方法的结果是0.99999982

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

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

还有一个问题是为什么比较函数的结果是false。

我有如下比较方法。 lhs 是 vector 的长度,rhs 刚好为 1。

return (fabsf(rhs-lhs) <= FLT_EPSILON) ? true : false;

此方法的结果为假。

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

我做错了什么?

最佳答案

epsilon 太小了。这是因为epsilon 是最小的。 (根据定义)

所以你需要更大的公差。

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

相关文章:

c++ - 传递条件作为参数

c++ - 酒店预订系统的面向对象设计

objective-c - 要在 objective-c 中 float 的字符串

c# - 如何在 C# 中生成随机数?

java - 以不同顺序添加相同 double 时的不同结果

c - 我的 for 循环添加了 +1 多余的内容,我不知道为什么

c++ - 在比较 float 时使用 epsilon 是否会破坏严格弱排序?

c++ - 将 boost::associative property map 与 boost::BIMAP 接口(interface)结合使用

matlab - 用非常小的值计算matlab中的函数

c++ - 嵌套类的静态对象可以在没有类定义的情况下声明