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;
}

Посилання[ред. | ред. код]