Должен ли я использовать модификатор strictfp при преобразовании float в double? - PullRequest
0 голосов
/ 13 октября 2018

Если я хочу написать метод, конвертирующий число с плавающей точкой в ​​двойное.

Есть ли случаи, когда эти два результата дадут другой результат?

Какую версию я должен использовать, если мне все равноо согласованности платформы?

Что если мне нужно, чтобы она работала согласованно на разных платформах?

  double f2d(float x) {
    return (double) x;
  }

или:

  strictfp double f2d(float x) {
    return (double) x;
  }

JLS 5.1.2:

Расширяющееся примитивное преобразование из числа с плавающей запятой, которое не является строгим, может потерять информацию об общей величине преобразованного значения.

почему это преобразование потеряет информацию?

1 Ответ

0 голосов
/ 13 октября 2018

strictfp не будет иметь никакого значения для преобразования float в double.Причина в спецификации языка Java, 4.2.3.Типы с плавающей точкой, форматы и значения .В частности:

Обратите внимание, что ограничения в таблице 4.2.3-A разработаны таким образом, что каждый элемент набора значений с плавающей запятой обязательно является также элементом набора значений с плавающей запятой-экспоненты,двойной набор значений и двойной расширенный показатель степени.

Поскольку каждый элемент из набора float является также элементом значения double, установите float в double преобразование будет точным независимо от того, строго ли это FP или нет.

...