Что для меня означает, что оно может отличаться при отключении strictfp.
JLS говорит, что значение модификатора strictfp
заключается в том, что любые выражения внутри класса илиметод оценивается как FP-строгий.
Однако JLS не говорит, что если вы вызываете другой метод в выражениях со строгим FP, то вычисления в этом методе также автоматически строго FP.
Это означает, что результат, полученный вами при вызове Float.valueOf
, не зависит от strictfp
/ строгости FP вызывающего абонента.
Обратная сторона (внутренний) Java-класс, который выполняет преобразование в Float.valueOf(String)
:
- , использует специальные значения для значений INF и NaN,
- обеспечивает, чтобы значение находилось в пределах ошибки. границы, установленные в javadoc, и
- в случае
Float
, он выполняет преобразование в double
арифметике.
Однако метод преобразования не является strictfp
метод, поэтому, если код чувствителен к строгости FP, то возникнет проблема.
Класс для поиска - jdk.internal.math.FloatingDecimal
в Java 11.