В документации для Math.atan2 говорится
Вычисленный результат должен быть в пределах 2 ulps от точного результата.
Тот факт, что он говорит, что 2 ulps предположительно означает, что есть случаи, когда возвращаемое значение не является ближайшим double
к истинному результату. Кто-нибудь знает, гарантировано ли вернуть те же значения для эквивалентных пар параметров int
? Другими словами, если a
, b
и k
являются положительными значениями int
, и ни переполнение a * k
, ни b * k
не гарантируется, что
Math.atan2(a, b) == Math.atan2(a * k, b * k)
Edit
Обратите внимание, что это определенно не относится к непереполняющим умножениям long
. Например
long a = 959786689;
long b = 363236985;
long k = 9675271;
System.out.println(Math.atan2(a, b));
System.out.println(Math.atan2(a * k, b * k));
печатает
1.2089992287797169
1.208999228779717
но я не смог найти пример в значениях int
.