Почему появился строгий фп?
Я всегда читал, что strictfp ограничивает вычисления с плавающей запятой стандартом IEEE-754, но никогда не читал, почему возникла необходимость ограничения результата вычисления в соответствии с этим стандартом?
1 ответ
Когда java разрабатывался Джеймсом Гослингом и его командой, независимость платформы была приоритетом. Они хотели сделать oak(Java) настолько лучше, что он будет работать точно так же на любой машине с другим набором команд, даже с разными операционными системами. Но это была проблема с арифметикой с плавающей запятой, то есть, когда дело дошло до вычисления значений с плавающей запятой или двойных значений, арифметический результат был разным на разных машинах (32/64 битная архитектура процессора) из-за точности. Так как некоторые процессоры были построены нацелены на эффективность (быстрые вычисления), как процессоры Pentium того времени, в то время как остальные были нацелены на точность (точные результаты), как старые процессоры того времени.
Поскольку процессор боролся за быстрые вычисления, округлил значения точности, а другой процессор - нет, и, следовательно, результат был немного другим. И эта разница была против java лозунга WORA. Таким образом, Java-люди пришли с модификатором strictfp, который ограничил результат арифметики с плавающей запятой стандартом IEEE-754.
Strictfp гарантирует, что мы получаем точно такие же результаты от наших вычислений с плавающей запятой на каждой платформе. Если мы не используем strictfp, реализация JVM может использовать дополнительную точность там, где это возможно. Подразумевается, что если мы не укажем strictfp, то JVM и JIT- компилятор получат лицензию на вычисления наших вычислений с плавающей запятой, как они захотят. В интересах скорости они, скорее всего, передадут вычисления нашему процессору. Но при строгом включении вычисления должны соответствовать арифметическим стандартам IEEE 754, что на практике, вероятно, означает, что JVM выполнит вычисления, что позволит получить тот же результат для арифметики с плавающей запятой на любой машине.