Java - будь точнее с двойным - PullRequest
0 голосов
/ 10 марта 2020

В настоящее время я пишу проект для универа, и мне было интересно, есть ли хорошие практики, чтобы быть более точными с двойными значениями. А именно, есть ли разница в точности, если я пишу просто длинное выражение непосредственно в операторе return, или лучше, если я разделю выражение на переменные final (кстати, это также делает его более читабельным)? Например, представьте, если бы у меня была следующая формула: Math.sin(a) / Math.cos(b) + Math.tan(c) / d; лучше ли написать так, как следует?

final double sinA = Math.sin(a);
final double cosB = Math.cos(b);
final double tanC = Math.tan(c);
return sinA / cosB + tanC / d;

Заранее спасибо!

1 Ответ

2 голосов
/ 10 марта 2020

Не будет никакой разницы, если ваша JVM / JIT правильно реализует IEEE754, что требуется согласно Java Спецификации языка.

Лично я бы написал

double ret = Math.sin(a) / Math.cos(b) + Math.tan(c) / d;
return ret;

, поскольку это позволяет мне устанавливать точку останова строки в операторе return ret;, что позволяет мне проверять возвращаемое значение без причудливых инструментов отладки, которые могут быть недоступны вам на рабочем сервере в 3 часа ночи! Я нахожу способ, которым вы написали, неясным: использование имени переменной более подвержено рефакторингу повреждений, чем стандартное имя функции.

Вы можете верить, что компилятор оптимизирует дополнительную переменную ret.

...