角度是double类型,存在a<b但是实际的a是等于b的情况

P1863 独眼兔

@[tetrad](/user/721909) `double` 不怎么精确,基本上不能用 `==` 来判断是否相等......所以我建议你用 `abs(a-b)<1e-6` 来判断。
by houmy @ 2024-04-11 15:37:46


@[tetrad](/user/721909) 对于两个 `double` 类型的**实**浮点数而言不存在这样的情况,请打印 `double` 的 $55$ 位(十进制)有效数字看看。 当然对于 `nan` 和 `inf` 而言可能会存在奇奇怪怪的逻辑,因为这两种量不算是实浮点数量。 @[houmy](/user/555809) 你是不是恰好说反了?是因为 `double` 判等 `==` 要求过于精确,而在计算中可能产生舍入误差而导致两个 `double` 类型结果不一,所以需要一个容许的误差。还有,你这个 `abs` 不要直接写出来啊,你这个是开了 `using namespace std;` 的吧,请写成 `std::abs`,别某天又有人发现自己写的 `abs(a-b)<1e-6` 出问题了。 `cmath` 中提供了两种风格的绝对值函数,大致分别为 C 语言风格的 `int abs(int _X);`、`double fabs(double _X);` 等以及 C++ 风格的 `std::abs`,`std::abs` 什么类型都适应,但是去掉 `std::` 可就不是了,开 `using namespace std;` 会将 `std::abs` 覆盖掉 `abs`,但是这并不意味着可以将 `std::abs` 和 `abs` 混为一谈。 写成 `fabs(a-b)<1e-6` 保险一点。 --- 还有一点值得强调,不能因为我们往往不容易使得 `double` 保持极高的精度运算,就说 `double` 不精确——不至于说被石头绊倒了就把过错全怪到石头上吧? 我们要有考察事物的主动性:我们是可以花费很多的时间去保证这一点的,不过这几乎不是必要的。
by Terrible @ 2024-04-11 18:36:48


嗯……似乎也不算恰好说反。忽略第三段的前半部分。
by Terrible @ 2024-04-11 18:42:30


|