Math.Atan2(double.NegativeInfinity, double.PositiveInfinity) - 错误或未记录的重大更改?
Math.Atan2(double.NegativeInfinity, double.PositiveInfinity) - bug, or undocumented breaking change?
考虑 double result = Math.Atan2(double.NegativeInfinity, double.PositiveInfinity);
。
在 .net 4.8 中这个 returns NaN
.
在 .net Core 3.1 或更高版本中这个 returns -0.7853981633974483
.
documentation for Math.Atan2() 状态:
If x or y is NaN, or if x and y are either PositiveInfinity or NegativeInfinity, the method returns NaN.
我想“PositiveInfinity 或 NegativeInfinity”可能意味着“both PositiveInfinity 或 both NegativeInfinity”,在这种情况下它不适用于我的示例(因为 x 是 NegativeInfinity 而 y 是 PositiveInfinity)但这看起来相当微妙 - 在任何情况下,它似乎仍然是一个错误或重大更改。
这是错误还是未记录的重大更改 - 或者我只是误会了事情?
(我发现这一点是因为在将我们的一个单元测试库移植到 .net 5 之后,一些单元测试由于这种行为变化而开始失败。)
这看起来是 a fix of a mismatch between the old behaviour and the IEEE 754 specified behaviour 的结果。但是文档还没有跟上新的行为。
考虑 double result = Math.Atan2(double.NegativeInfinity, double.PositiveInfinity);
。
在 .net 4.8 中这个 returns NaN
.
在 .net Core 3.1 或更高版本中这个 returns -0.7853981633974483
.
documentation for Math.Atan2() 状态:
If x or y is NaN, or if x and y are either PositiveInfinity or NegativeInfinity, the method returns NaN.
我想“PositiveInfinity 或 NegativeInfinity”可能意味着“both PositiveInfinity 或 both NegativeInfinity”,在这种情况下它不适用于我的示例(因为 x 是 NegativeInfinity 而 y 是 PositiveInfinity)但这看起来相当微妙 - 在任何情况下,它似乎仍然是一个错误或重大更改。
这是错误还是未记录的重大更改 - 或者我只是误会了事情?
(我发现这一点是因为在将我们的一个单元测试库移植到 .net 5 之后,一些单元测试由于这种行为变化而开始失败。)
这看起来是 a fix of a mismatch between the old behaviour and the IEEE 754 specified behaviour 的结果。但是文档还没有跟上新的行为。