#c# #atan2
Вопрос:
Считать double result = Math.Atan2(double.NegativeInfinity, double.PositiveInfinity);
.
В .net 4.8 это возвращается NaN
.
В .net Core 3.1 или более поздней версии это возвращается -0.7853981633974483
.
Документация для Math.Atan2() гласит:
Если x или y равно NaN, или если x и y являются либо положительными, либо отрицательными, метод возвращает значение NaN.
Я полагаю, что «либо положительная, либо отрицательная близость» может означать «как положительная, так и отрицательная близость», и в этом случае это не относится к моему примеру (потому что x — отрицательная близость, а y-положительная близость), но это кажется довольно тонким-и в любом случае, это все еще кажется ошибкой или критическим изменением.
Так это ошибка или недокументированное нарушение — или я просто неправильно понимаю вещи?
(Я обнаружил это, потому что после переноса одной из наших библиотек модульных тестов в .net 5 некоторые модульные тесты начали давать сбои из-за этого изменения в поведении.)
Комментарии:
1. Функция C
atan2
также дает -0,7853981633974483 (-45 градусов) (проверкаman atan2
). Похоже, что .NET Framework здесь самый странный.
Ответ №1:
Похоже, что это результат исправления несоответствия между старым поведением и заданным IEEE 754 поведением. Но документация еще не догнала новое поведение.