Должен ли я использовать модификатор strictfp при преобразовании float в double?

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

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

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

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

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

или же:

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

JLS 5.1.2:

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

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

2 ответа

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

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

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

Вы можете использовать классы-обертки. поплавок х = 5/2; double y = Double.parseDouble(x);

Больше подробностей,

https://www.google.lk/amp/s/www.geeksforgeeks.org/wrapper-classes-java/amp/

Другие вопросы по тегам