Spec-Zone .ru
спецификации, руководства, описания, API
|
Содержание | Предыдущий | Следующий | Индекс | Спецификация Виртуальной машины JavaTM |
Работа
Преобразоватьfloat
кdouble
Формат
f2d
Формы
f2d = 141 (0x8d)
Стек операнда
..., значение..., результат
Описание
Значение на вершине стека операнда должно иметь типfloat
. Это выталкивается от стека операнда и подвергается преобразованию набора значений (§3.8.3), приводя к значению'. Затем значение' преобразовывается в adouble
результат. Этот результат продвигается на стек операнда.
Примечания
Где f2d инструкция строга FP (§3.8.2), это выполняет расширяющееся примитивное преобразование (§2.6.2). Поскольку все значения набора значений плавающего (§3.3.2) являются точно представимыми значениями двойного набора значений (§3.3.2), такое преобразование точно.
Где f2d инструкция не строга FP, результат преобразования может быть взят от набора значений "двойная расширенная экспонента"; это не обязательно округляется к самому близкому представимому значению в двойном наборе значений. Однако, если значение операнда принимается от набора значений "расширенная экспонента плавающая", и целевой результат ограничивается к двойному набору значений, округляясь имеющий значение может требоваться.
Работа
Преобразоватьfloat
кint
Формат
f2i
Формы
f2i = 139 (0x8b)
Стек операнда
..., значение..., результат
Описание
Значение на вершине стека операнда должно иметь типfloat
. Это выталкивается от стека операнда и подвергается преобразованию набора значений (§3.8.3), приводя к значению'. Затем значение' преобразовывается вint
результат. Этот результат продвигается на стек операнда:
int
0.
int
, тогда результат int
значение V.
int
, или значение' должно быть слишком большим (положительное значение большой величины или положительная бесконечность), и результатом является самое большое представимое значение типа int
. Примечания
f2i инструкция выполняет сужающееся примитивное преобразование (§2.6.3). Это может потерять информацию о полной величине имеющей значение' и может также потерять точность.
Работа
Преобразоватьfloat
кlong
Формат
f2l
Формы
f2l = 140 (0x8c)
Стек операнда
..., значение..., результат
Описание
Значение на вершине стека операнда должно иметь типfloat
. Это выталкивается от стека операнда и подвергается преобразованию набора значений (§3.8.3), приводя к значению'. Затем значение' преобразовывается в along
результат. Этот результат продвигается на стек операнда:
long
0.
long
, тогда результат long
значение V.
long
, или значение' должно быть слишком большим (положительное значение большой величины или положительная бесконечность), и результатом является самое большое представимое значение типа long
. Примечания
f2l инструкция выполняет сужающееся примитивное преобразование (§2.6.3). Это может потерять информацию о полной величине имеющей значение' и может также потерять точность.
Работа
Добавитьfloat
Формат
fadd
Формы
fadd = 98 (0x62)
Стек операнда
..., value1, value2..., результат
Описание
И value1 и value2 должны иметь типfloat
. Значения выталкиваются от операнда, складывают и подвергаются преобразованию набора значений (§3.8.3), приводя к value1' и value2'.float
результатом является value1' + value2'. Результат продвигается на стек операнда.
Результатом fadd инструкции управляют правила арифметики IEEE:
float
, мы говорим переполнения работы; результатом является тогда бесконечность соответствующего знака. Если величина является слишком маленькой, чтобы представить как a float
, мы говорим потери значимости работы; результатом является тогда нуль соответствующего знака. Виртуальная машина Java требует поддержки постепенной потери значимости как определено IEEE 754. Несмотря на то, что переполнение, потеря значимости, или потеря точности могут произойти, выполнение fadd инструкции никогда не бросает исключение на этапе выполнения.
Работа
Загрузкаfloat
от массива
Формат
faload
Формы
faload = 48 (0x30)
Стек операнда
..., arrayref, индекс..., значение
Описание
arrayref должен иметь типreference
и должен обратиться к массиву, компоненты которого имеют типfloat
. Индекс должен иметь типint
. И arrayref и индекс выталкиваются от стека операнда.float
значение в компоненте массива по индексу получается и продвигается на стек операнда.
Исключения на этапе выполнения
Если arrayrefnull
, faload бросает aNullPointerException
.
Иначе, если индекс не в пределах границ массива, на который ссылается arrayref, faload инструкция бросает ArrayIndexOutOfBoundsException
.
Работа
Хранилище вfloat
массив
Формат
fastore
Формы
fastore = 81 (0x51)
Стек операнда
..., arrayref, индекс, оценивают...
Описание
arrayref должен иметь типreference
и должен обратиться к массиву, компоненты которого имеют типfloat
. Индекс должен иметь типint
, и значение должно иметь типfloat
. arrayref, индекс, и значение выталкиваются от стека операнда.float
значение подвергается преобразованию набора значений (§3.8.3), приводя к значению', и значение' сохранено как компонент массива, индексированного индексом.
Исключения на этапе выполнения
Если arrayrefnull
, fastore бросает aNullPointerException
.
Иначе, если индекс не в пределах границ массива, на который ссылается arrayref, fastore инструкция бросает ArrayIndexOutOfBoundsException
.
Работа
Сравнитьсяfloat
Формат
fcmp <op>
Формы
fcmpg = 150 (0x96) fcmpl = 149 (0x95)
Стек операнда
..., value1, value2..., результат
Описание
И value1 и value2 должны иметь тип float
. Значения выталкиваются от операнда, складывают и подвергаются преобразованию набора значений (§3.8.3), приводя к value1' и value2'. Сравнение с плавающей точкой выполняется:
int
значение 1 продвигается на стек операнда. int
значение 0 продвигается на стек операнда.int
значение-1 продвигается на стек операнда. int
оцените 1 на стек операнда, и fcmpl инструкция продвигает int
оцените-1 на стек операнда.
Сравнение с плавающей точкой выполняется в соответствии с IEEE 754. Все значения кроме НЭН упорядочиваются с отрицательной бесконечностью меньше чем все конечные значения и положительная бесконечность, больше чем все конечные значения. Положительный нулевой и отрицательный нуль считают равным.
Примечания
fcmpg и fcmpl инструкции отличаются только по их обработке сравнения, включающего НЭН. НЭН Неупорядочивают, таким образом, любойfloat
сравнение перестало работать, если или или оба из его операндов НЭН. И с fcmpg и с fcmpl доступный, любойfloat
сравнение может быть скомпилировано, чтобы продвинуть тот же самый результат на стек операнда, перестало ли сравнение работать на значениях NON-НЭН или сбоях, потому что это встретилось с НЭН. Для получения дополнительной информации см. Раздел 7.5, "Больше Примеров Управления."
Работа
Продвинутьfloat
Формат
fconst _ <f>
Формы
fconst_0 = 11 (0xb) fconst_1 = 12 (0xc) fconst_2 = 13 (0xd)
Стек операнда
......, <f>
Описание
Продвиньте float
постоянный <f> (0.0, 1.0, или 2.0) на стек операнда.
Работа
Разделитьсяfloat
Формат
fdiv
Формы
fdiv = 110 (0x6e)
Стек операнда
..., value1, value2..., результат
Описание
И value1 и value2 должны иметь типfloat
. Значения выталкиваются от операнда, складывают и подвергаются преобразованию набора значений (§3.8.3), приводя к value1' и value2'.float
результатом является value1' / value2'. Результат продвигается на стек операнда.
Результатом fdiv инструкции управляют правила арифметики IEEE:
float
использование IEEE 754 вокруг к самому близкому режиму. Если величина является слишком большой, чтобы представить как a float
, мы говорим переполнения работы; результатом является тогда бесконечность соответствующего знака. Если величина является слишком маленькой, чтобы представить как a float
, мы говорим потери значимости работы; результатом является тогда нуль соответствующего знака. Виртуальная машина Java требует поддержки постепенной потери значимости как определено IEEE 754. Несмотря на то, что переполнение, потеря значимости, подразделение нулем, или потеря точности могут произойти, выполнение fdiv инструкции никогда не бросает исключение на этапе выполнения.
Работа
Загрузкаfloat
от локальной переменной
Формат
fload индекс
Формы
fload = 23 (0x17)
Стек операнда
......, значение
Описание
Индекс является байтом без знака, который должен быть индексом в массив локальной переменной текущего фрейма (§3.6). Локальная переменная по индексу должна содержать a float
. Значение локальной переменной по индексу продвигается на стек операнда.
Примечания
fload код операции может использоваться в соединении с широкой инструкцией, чтобы получить доступ к локальной переменной, используя двухбайтовый индекс без знака.
Работа
Загрузкаfloat
от локальной переменной
Формат
fload _ <n>
Формы
fload_0 = 34 (0x22) fload_1 = 35 (0x23) fload_2 = 36 (0x24) fload_3 = 37 (0x25)
Стек операнда
......, значение
Описание
<n> должен быть индекс в массив локальной переменной текущего фрейма (§3.6). Локальная переменная в <n> должна содержать a float
. Значение локальной переменной в <n> продвигается на стек операнда.
Примечания
Каждый из fload _ <n> инструкции является тем же самым как fload с индексом <n>, за исключением того, что операнд <n> неявен.
Работа
Умножитьсяfloat
Формат
fmul
Формы
fmul = 106 (0x6a)
Стек операнда
..., value1, value2..., результат
Описание
И value1 и value2 должны иметь типfloat
. Значения выталкиваются от операнда, складывают и подвергаются преобразованию набора значений (§3.8.3), приводя к value1' и value2'.float
результатом является value1' * value2'. Результат продвигается на стек операнда.
Результатом fmul инструкции управляют правила арифметики IEEE:
float
, мы говорим переполнения работы; результатом является тогда бесконечность соответствующего знака. Если величина является слишком маленькой, чтобы представить как a float
, мы говорим потери значимости работы; результатом является тогда нуль соответствующего знака. Виртуальная машина Java требует поддержки постепенной потери значимости как определено IEEE 754. Несмотря на то, что переполнение, потеря значимости, или потеря точности могут произойти, выполнение fmul инструкции никогда не бросает исключение на этапе выполнения.
Работа
Инвертироватьfloat
Формат
fneg
Формы
fneg = 118 (0x76)
Стек операнда
..., значение..., результат
Описание
Значение должно иметь типfloat
. Это выталкивается от стека операнда и подвергается преобразованию набора значений (§3.8.3), приводя к значению'.float
результатом является арифметическое отрицание имеющее значение'. Этот результат продвигается на стек операнда.
Дляfloat
значения, отрицание не является тем же самым как вычитанием от нуля. Еслиx
+0.0
, тогда0.0
-x
равняется +0.0
, но -x
равняется -0.0
. Унарный минус просто инвертирует знак afloat
.
Особые случаи интереса:
Работа
Остатокfloat
Формат
frem
Формы
frem = 114 (0x72)
Стек операнда
..., value1, value2..., результат
Описание
И value1 и value2 должны иметь типfloat
. Значения выталкиваются от операнда, складывают и подвергаются преобразованию набора значений (§3.8.3), приводя к value1' и value2'. Результат вычисляется и продвигается на стек операнда как afloat
.
Результатом frem инструкции не является то же самое как та из так называемой работы остатка, определенной IEEE 754. Работа "остатка" IEEE 754 вычисляет остаток от округляющегося подразделения, не подразделения усечения, и таким образом, его поведение не походит на это обычного целочисленного оператора остатка. Вместо этого виртуальная машина Java определяет frem, чтобы вести себя способом, аналогичным той из целочисленных инструкций остатка виртуальной машины Java (irem и lrem); это может быть по сравнению с библиотечной функцией C fmod
.
Результатом frem инструкции управляют эти правила:
Несмотря на то, что подразделение нулем может произойти, оценка frem инструкции никогда не бросает исключение на этапе выполнения. Переполнение, потеря значимости, или потеря точности не могут произойти.
Примечания
Работа остатка IEEE 754 может быть вычислена библиотечной подпрограммой Math.IEEEremainder
.
Работа
Возвратитьсяfloat
от метода
Формат
freturn
Формы
freturn = 174 (0xae)
Стек операнда
..., оцените [пустой]
Описание
У текущего метода должен быть тип возвратаfloat
. Значение должно иметь типfloat
. Если текущий метод является asynchronized
метод, монитор, полученный или повторно введенный на вызове метода, выпускается или выходится (соответственно) как будто выполнением monitorexit инструкции. Если никакое исключение не выдается, значение выталкивается от стека операнда текущего фрейма (§3.6) и подвергается преобразованию набора значений (§3.8.3), приводя к значению'. Значение' продвигается на стек операнда фрейма invoker. Любые другие значения на стеке операнда текущего метода отбрасываются.
Интерпретатор тогда возвращает управление invoker метода, восстанавливая фрейм invoker.
Исключения на этапе выполнения
Если текущий метод является asynchronized
метод и текущий поток не являются владельцем монитора, полученного или повторно введенного на вызове метода, freturn бросаетIllegalMonitorStateException
. Это может произойти, например, если asynchronized
метод содержит monitorexit инструкцию, но никакую monitorenter инструкцию, на объекте, на котором синхронизируется метод.
Иначе, если реализация виртуальной машины осуществляет правила о структурированном использовании блокировок, описанных в §8.13 и если первое из тех правил нарушается во время вызова текущего метода, то freturn бросает IllegalMonitorStateException
.
Работа
Хранилищеfloat
в локальную переменную
Формат
fstore индекс
Формы
fstore = 56 (0x38)
Стек операнда
..., значение...
Описание
Индекс является байтом без знака, который должен быть индексом в массив локальной переменной текущего фрейма (§3.6). Значение на вершине стека операнда должно иметь тип float
. Это выталкивается от стека операнда и подвергается преобразованию набора значений (§3.8.3), приводя к значению'. Значение локальной переменной по индексу устанавливается оценить'.
Примечания
fstore код операции может использоваться в соединении с широкой инструкцией, чтобы получить доступ к локальной переменной, используя двухбайтовый индекс без знака.
Работа
Хранилищеfloat
в локальную переменную
Формат
fstore _ <n>
Формы
fstore_0 = 67 (0x43) fstore_1 = 68 (0x44) fstore_2 = 69 (0x45) fstore_3 = 70 (0x46)
Стек операнда
..., значение...
Описание
<n> должен быть индекс в массив локальной переменной текущего фрейма (§3.6). Значение на вершине стека операнда должно иметь тип float
. Это выталкивается от стека операнда и подвергается преобразованию набора значений (§3.8.3), приводя к значению'. Значение локальной переменной в <n> устанавливается оценить'.
Примечания
Каждый из fstore _ <n> является тем же самым как fstore с индексом <n>, за исключением того, что операнд <n> неявен.
Работа
Вычестьfloat
Формат
fsub
Формы
fsub = 102 (0x66)
Стек операнда
..., value1, value2..., результат
Описание
И value1 и value2 должны иметь типfloat
. Значения выталкиваются от операнда, складывают и подвергаются преобразованию набора значений (§3.8.3), приводя к value1' и value2'.float
результатом является value1' - value2'. Результат продвигается на стек операнда.
Дляfloat
вычитание, это всегда имеет место этоa
-b
приводит к тому же самому результату какa
+(-b
). Однако, для fsub инструкции, вычитание от нуля не является тем же самым как отрицанием, потому что еслиx
+0.0
, тогда0.0
-x
равняется +0.0
, но -x
равняется -0.0
.
Виртуальная машина Java требует поддержки постепенной потери значимости как определено IEEE 754. Несмотря на то, что переполнение, потеря значимости, или потеря точности могут произойти, выполнение fsub инструкции никогда не бросает исключение на этапе выполнения.
Содержание | Предыдущий | Следующий | Индекс
Спецификация Виртуальной машины JavaTM
Авторское право © Sun Microsystems, Inc 1999 года. Все права защищены
Пожалуйста, отправьте любые комментарии или исправления к jvm@java.sun.com