Используйте “больше, чем, или равняется” или просто “больше, чем”

Вы, кажется, говорите, что в следующем преобразовании float.

float f1 = 0.5048076923076923F;
float f2 = 0.5048076923076923F;
float f = f1 + f2;

На самом деле, нет преобразования. Все значения float.

В частности, литерал 0.5048076923076923F является float. Трейлинг F делает его float. Если вам нужен двойной литерал, не используйте F или замените его на D.

Когда ваш учитель говорит «все значения с плавающей точкой преобразуются в double», он ошибается. JLS говорит (в действительности), что числовой примитивный операнд будет преобразован в double , когда другой операнд является double . Если оба операнда имеют значение float, то операция будет выполняться с использованием арифметики с плавающей запятой одинарной точности.

Ссылка JLS: JLS 5.6.2: Двоичное числовое продвижение .


Было отмечено, что на аппаратном уровне могут происходить дополнительные преобразования. Например, JLS говорит следующее:

В выражении, не являющемся строгим с точки зрения FP, предоставляется некоторая свобода для реализации, чтобы использовать расширенный диапазон экспонент для представления промежуточных результатов; общий эффект, грубо говоря, состоит в том, что вычисление может дать «правильный ответ» в ситуациях, когда исключительное использование набора значений с плавающей запятой или набора двойных значений может привести к переполнению или потере.

blockquote>

Однако:

  • Это разрешено, только если выражение не strictfp.
  • Это не те «преобразования», о которых JLS говорит в JLS 5.6.2.
  • Это все еще противоречит тому, что говорит учитель ОП. Он (или она) заявляет, что все вычисления с плавающей запятой выполняются с использованием double. JLS утверждает, что при определенных обстоятельствах , аппаратная платформа может использовать арифметику с расширенной точностью (возможно, с большей точностью, чем 64-битная с плавающей запятой), а в других обстоятельствах она не должна сделайте это .
  • [Тысяча сто тридцать два]

13
задан bdukes 23 October 2008 в 19:42
поделиться