JLS, кажется, противоречит сам себе


person nativist.bill.cutting    schedule 01.10.2013    source источник
comment
stackoverflow.com/questions/1293819/ также отвечает на этот вопрос   -  person Hari Menon    schedule 01.10.2013
comment
Возможно, первую строку следует читать как Вообще расширяющее примитивное преобразование не делает... а вторая - частный случай.   -  person Thomas    schedule 01.10.2013
comment
ну тогда это ошибка. должно. но это не так.   -  person nativist.bill.cutting    schedule 01.10.2013
comment
@nativist.bill.cutting Итак, сообщите о проблеме в Oracle.   -  person Dave Newton    schedule 01.10.2013
comment
Хотя это сбивает с толку, кажется, что последнее является особым случаем. Примечание: на x86/x64 я сомневаюсь, что strictfp нужен.   -  person Peter Lawrey    schedule 01.10.2013
comment
может ли кто-нибудь предоставить преобразование этого типа, которое теряет информацию о величине.   -  person nativist.bill.cutting    schedule 01.10.2013
comment
@nativist.bill.cutting вам сначала нужно найти процессор / JVM, где операции, не являющиеся строгими FP, ведут себя иначе, чем операции, строгие FP ...   -  person assylias    schedule 01.10.2013


Ответы (3)


Что бы это ни стоило, спецификация JVM немного яснее в формулировке в 2.11.4:

Расширение числовых преобразований не приводит к потере информации об общей величине числового значения. Действительно, преобразования, расширяющиеся от int к long и от int к double, вообще не теряют никакой информации; числовое значение сохраняется точно. Преобразования, расширяющиеся от float до double, которые являются строгими FP (§2.8.2), также точно сохраняют числовое значение; однако такие преобразования, которые не являются строгими FP, могут потерять информацию об общей величине преобразованного значения.

person assylias    schedule 01.10.2013
comment
... Я убежден, что это тоже неправильно, но т.к. теперь есть две ссылки, я собираюсь спросить лингвиста или профессора английского языка. Возможно, я плохо понимаю английский, но говорить Widening numeric conversions do not lose information about the overall magnitude of a numeric value. ... а затем говорить, кроме как в этом конкретном случае, я думаю, логически неправильно, но, что более важно, вводит в заблуждение, если вы, например, бросите читать, не дойдя до последнего предложения. - person nativist.bill.cutting; 01.10.2013
comment
@ nativist.bill.cutting Я думаю, предполагается, что читатель понимает, что нестрогая операция fp может вызывать ошибки в целом и что первое предложение применимо только к правильно сформированным преобразованиям (т. Е. FP-strict). Но я согласен с вами, что формулировка неудачна. - person assylias; 01.10.2013

Да, это так. От Оракула:

Привет Билл,

Спасибо за ваше письмо. Я согласен, что есть противоречие между:

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

и:

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

Только первое предложение появилось в первом издании JLS до введения strictfp. Второе предложение появилось во втором издании JLS как часть поддержки strictfp, и первое предложение должно было быть изменено одновременно. В выпуске Java SE 8 я поясню, что только некоторые расширяющие примитивные преобразования не теряют информацию о величине.

person nativist.bill.cutting    schedule 11.10.2013

Это скорее уточнение. В конкретном случае преобразования числа с плавающей запятой в двойное нет гарантии, что информация не будет потеряна, если не указано strictfp.

person Michael Hoyle    schedule 01.10.2013
comment
Но это все еще противоречит предыдущему утверждению. - person arshajii; 01.10.2013
comment
Если мудрить, то да. Тот факт, что они находятся непосредственно рядом друг с другом в документации, означает, что они идут вместе, и одно является уточнением конкретного экземпляра другого. Это все равно, что сказать, что летом все газоны зеленые. Если становится слишком жарко, есть риск, что он не будет зеленым, если о нем не позаботятся должным образом. - person Michael Hoyle; 01.10.2013