Strictfp
strictfp — ключове слово у мові програмування Java, яке обмежує обчислення чисел з рухомою комою для забезпечення мобільності. Воно було введено у Java починаючи з версії 1.2 Java Virtual Machine (JVM).
Основи
Стандарт IEEE 754 визначає стандартний метод для обчислень чисел з рухомою комою та зберігання значення з рухомою комою із простою (32-біт, у Java-типі float) або подвійною (64-біт, у Java-типі double) точністю. Справа в тому, що JVM використовує всю можливу точність процесора, а вона на різних системах різна, тому і результат може вийти різний. Наприклад, коли ви порівнюєте два double 0,555 і 0,556 із точністю двох знаків після коми, то вони рівні, а от при точності трьох знаків — ні. Насправді, сучасні компілятори самі ставлять strictfp, тому що випадки, коли він не потрібен, можна перерахувати на пальцях. Йдеться про програми, які вимагають значну точність обчислень (наприклад, пов'язані з наукою).
Використання
Використання strictfp гарантує, що результати обчислень із рухомою комою будуть однакові на всіх платформах. Це може бути надзвичайно корисно при порівнянні чисел з рухомою комою.
strictfp може бути використаний у класах, інтерфейсах і неабстрактних методах. При використанні strictfp у методі всі розрахунки проводяться всередині методу. При використанні strictfp у класі всі розрахунки проводяться всередині класу.
Приклад використання strictfp у класі:
public strictfp class MyFPclass {
// ... вміст класу ...
}
Приклад використання strictfp у методах (ці strictfp-методи знаходяться у класі StrictMath, який у свою чергу міститься у Java-пакеті java.lang):
public static strictfp double toRadians(double angdeg) {
// Do not delegate to Math.toRadians(angdeg) because
// this method has the strictfp modifier.
return angdeg / 180.0 * PI;
}
public static strictfp double toDegrees(double angrad) {
// Do not delegate to Math.toDegrees(angrad) because
// this method has the strictfp modifier.
return angrad * 180.0 / PI;
}
Посилання
- FP-strict Expressions (англ.)
- Flanagan, David (March 2005). Java in a Nutshell (Fifth ed.). O'Reilly Media. ISBN 978-0-596-00773-7. Retrieved 2010-03-03. (англ.)
- Schildt, Herbert (2007). Java: A Beginner's Guide (4 ed.). McGraw-Hill Companies. ISBN 978-0-07-226384-8. (англ.)