Spec-Zone .ru
спецификации, руководства, описания, API
|
Содержание | Предыдущий | Следующий | Индекс | Спецификация Виртуальной машины JavaTM |
Работа
Преобразоватьdouble
кfloat
Формат
d2f
Формы
d2f = 144 (0x90)
Стек операнда
..., значение..., результат
Описание
Значение на вершине стека операнда должно иметь типdouble
. Это выталкивается от стека операнда и подвергается преобразованию набора значений (§3.8.3) приводящий к значению'. Затем значение' преобразовывается в afloat
результат используя IEEE 754 вокруг для самого близкого режима. Результат продвигается на стек операнда.
Где d2f инструкция строга FP (§3.8.2), результат преобразования всегда округляется к самому близкому представимому значению в наборе значений плавающем (§3.3.2).
Где d2f инструкция не строга FP, результат преобразования может быть взят от набора значений "расширенная экспонента плавающая" (§3.3.2); это не обязательно округляется к самому близкому представимому значению в наборе значений плавающем.
Конечное значение', слишком маленькое, чтобы быть представленным как afloat
преобразовывается в нуль того же самого знака; конечное значение', слишком большое, чтобы быть представленным как afloat
преобразовывается в бесконечность того же самого знака. Adouble
НЭН преобразовывается в afloat
НЭН.
Примечания
d2f инструкция выполняет сужающееся примитивное преобразование (§2.6.3). Это может потерять информацию о полной величине имеющей значение' и может также потерять точность.
Работа
Преобразоватьdouble
кint
Формат
d2i
Формы
d2i = 142 (0x8e)
Стек операнда
..., значение..., результат
Описание
Значение на вершине стека операнда должно иметь типdouble
. Это выталкивается от стека операнда и подвергается преобразованию набора значений (§3.8.3) приводящий к значению'. Затем значение' преобразовывается вint
. Результат продвигается на стек операнда:
int
0.
int
, тогда результат int
значение V.
int
, или значение' должно быть слишком большим (положительное значение большой величины или положительная бесконечность), и результатом является самое большое представимое значение типа int
. Примечания
d2i инструкция выполняет сужающееся примитивное преобразование (§2.6.3). Это может потерять информацию о полной величине имеющей значение' и может также потерять точность.
Работа
Преобразоватьdouble
кlong
Формат
d2l
Формы
d2l = 143 (0x8f)
Стек операнда
..., значение..., результат
Описание
Значение на вершине стека операнда должно иметь типdouble
. Это выталкивается от стека операнда и подвергается преобразованию набора значений (§3.8.3) приводящий к значению'. Затем значение' преобразовывается в along
. Результат продвигается на стек операнда:
long
0.
long
, тогда результат long
значение V.
long
, или значение' должно быть слишком большим (положительное значение большой величины или положительная бесконечность), и результатом является самое большое представимое значение типа long
. Примечания
d2l инструкция выполняет сужающееся примитивное преобразование (§2.6.3). Это может потерять информацию о полной величине имеющей значение' и может также потерять точность.
Работа
Добавитьdouble
Формат
dadd
Формы
dadd = 99 (0x63)
Стек операнда
..., value1, value2..., результат
Описание
И value1 и value2 должны иметь типdouble
. Значения выталкиваются от операнда, складывают и подвергаются преобразованию набора значений (§3.8.3), приводя к value1' и value2'.double
результатом является value1' + value2'. Результат продвигается на стек операнда.
Результатом dadd инструкции управляют правила арифметики IEEE:
double
, мы говорим переполнения работы; результатом является тогда бесконечность соответствующего знака. Если величина является слишком маленькой, чтобы представить как a double
, мы говорим потери значимости работы; результатом является тогда нуль соответствующего знака. Виртуальная машина Java требует поддержки постепенной потери значимости как определено IEEE 754. Несмотря на то, что переполнение, потеря значимости, или потеря точности могут произойти, выполнение dadd инструкции никогда не бросает исключение на этапе выполнения.
Работа
Загрузкаdouble
от массива
Формат
daload
Формы
daload = 49 (0x31)
Стек операнда
..., arrayref, индекс..., значение
Описание
arrayref должен иметь типreference
и должен обратиться к массиву, компоненты которого имеют типdouble
. Индекс должен иметь типint
. И arrayref и индекс выталкиваются от стека операнда.double
значение в компоненте массива по индексу получается и продвигается на стек операнда.
Исключения на этапе выполнения
Если arrayrefnull
, daload бросает aNullPointerException
.
Иначе, если индекс не в пределах границ массива, на который ссылается arrayref, daload инструкция бросает ArrayIndexOutOfBoundsException
.
Работа
Хранилище вdouble
массив
Формат
dastore
Формы
dastore = 82 (0x52)
Стек операнда
..., arrayref, индекс, оценивают...
Описание
arrayref должен иметь типreference
и должен обратиться к массиву, компоненты которого имеют типdouble
. Индекс должен иметь типint
, и значение должно иметь типdouble
. arrayref, индекс, и значение выталкиваются от стека операнда.double
значение подвергается преобразованию набора значений (§3.8.3), приводя к значению', которое сохранено как компонент массива, индексированного индексом.
Исключения на этапе выполнения
Если arrayrefnull
, dastore бросает aNullPointerException
.
Иначе, если индекс не в пределах границ массива, на который ссылается arrayref, dastore инструкция бросаетArrayIndexOutOfBounds
Exception
.
Работа
Сравнитьсяdouble
Формат
dcmp <op>
Формы
dcmpg = 152 (0x98) dcmpl = 151 (0x97)
Стек операнда
..., value1, value2..., результат
Описание
И value1 и value2 должны иметь тип double
. Значения выталкиваются от операнда, складывают и подвергаются преобразованию набора значений (§3.8.3), приводя к value1' и value2'. Сравнение с плавающей точкой выполняется:
int
значение 1 продвигается на стек операнда. int
значение 0 продвигается на стек операнда.int
значение-1 продвигается на стек операнда. int
оцените 1 на стек операнда, и dcmpl инструкция продвигает int
оцените-1 на стек операнда.
Сравнение с плавающей точкой выполняется в соответствии с IEEE 754. Все значения кроме НЭН упорядочиваются с отрицательной бесконечностью меньше чем все конечные значения и положительная бесконечность, больше чем все конечные значения. Положительный нулевой и отрицательный нуль считают равным.
Примечания
dcmpg и dcmpl инструкции отличаются только по их обработке сравнения, включающего НЭН. НЭН Неупорядочивают, таким образом, любойdouble
сравнение перестало работать, если или или оба из его операндов НЭН. И с dcmpg и с dcmpl доступный, любойdouble
сравнение может быть скомпилировано, чтобы продвинуть тот же самый результат на стек операнда, перестало ли сравнение работать на значениях NON-НЭН или сбоях, потому что это встретилось с НЭН. Для получения дополнительной информации см. Раздел 7.5, "Больше Примеров Управления."
Работа
Продвинутьdouble
Формат
dconst _ <d>
Формы
dconst_0 = 14 (0xe) dconst_1 = 15 (0xf)
Стек операнда
......, <d>
Описание
Продвиньте double
постоянный <d> (0.0 или 1.0) на стек операнда.
Работа
Разделитьсяdouble
Формат
ddiv
Формы
ddiv = 111 (0x6f)
Стек операнда
..., value1, value2..., результат
Описание
И value1 и value2 должны иметь типdouble
. Значения выталкиваются от операнда, складывают и подвергаются преобразованию набора значений (§3.8.3), приводя к value1' и value2'.double
результатом является value1' / value2'. Результат продвигается на стек операнда.
Результатом ddiv инструкции управляют правила арифметики IEEE:
double
использование IEEE 754 вокруг к самому близкому режиму. Если величина является слишком большой, чтобы представить как a double
, мы говорим переполнения работы; результатом является тогда бесконечность соответствующего знака. Если величина является слишком маленькой, чтобы представить как a double
, мы говорим потери значимости работы; результатом является тогда нуль соответствующего знака. Виртуальная машина Java требует поддержки постепенной потери значимости как определено IEEE 754. Несмотря на то, что переполнение, потеря значимости, подразделение нулем, или потеря точности могут произойти, выполнение ddiv инструкции никогда не бросает исключение на этапе выполнения.
Работа
Загрузкаdouble
от локальной переменной
Формат
dload индекс
Формы
dload = 24 (0x18)
Стек операнда
......, значение
Описание
Индекс является байтом без знака. И индекс и индекс + 1 должны быть индексами в массив локальной переменной текущего фрейма (§3.6). Локальная переменная по индексу должна содержать a double
. Значение локальной переменной по индексу продвигается на стек операнда.
Примечания
dload код операции может использоваться в соединении с широкой инструкцией, чтобы получить доступ к локальной переменной, используя двухбайтовый индекс без знака.
Работа
Загрузкаdouble
от локальной переменной
Формат
dload _ <n>
Формы
dload_0 = 38 (0x26) dload_1 = 39 (0x27) dload_2 = 40 (0x28) dload_3 = 41 (0x29)
Стек операнда
......, значение
Описание
И <n> и <n> + 1 должны быть индексами в массив локальной переменной текущего фрейма (§3.6). Локальная переменная в <n> должна содержать a double
. Значение локальной переменной в <n> продвигается на стек операнда.
Примечания
Каждый из dload _ <n> инструкции является тем же самым как dload с индексом <n>, за исключением того, что операнд <n> неявен.
Работа
Умножитьсяdouble
Формат
dmul
Формы
dmul = 107 (0x6b)
Стек операнда
..., value1, value2..., результат
Описание
И value1 и value2 должны иметь типdouble
. Значения выталкиваются от операнда, складывают и подвергаются преобразованию набора значений (§3.8.3), приводя к value1' и value2'.double
результатом является value1' * value2'. Результат продвигается на стек операнда.
Результатом dmul инструкции управляют правила арифметики IEEE:
double
, мы говорим переполнения работы; результатом является тогда бесконечность соответствующего знака. Если величина является слишком маленькой, чтобы представить как a double
, мы говорим потери значимости работы; результатом является тогда нуль соответствующего знака. Виртуальная машина Java требует поддержки постепенной потери значимости как определено IEEE 754. Несмотря на то, что переполнение, потеря значимости, или потеря точности могут произойти, выполнение dmul инструкции никогда не бросает исключение на этапе выполнения.
Работа
Инвертироватьdouble
Формат
dneg
Формы
dneg = 119 (0x77)
Стек операнда
..., значение..., результат
Описание
Значение должно иметь типdouble
. Это выталкивается от стека операнда и подвергается преобразованию набора значений (§3.8.3), приводя к значению'.double
результатом является арифметическое отрицание имеющее значение'. Результат продвигается на стек операнда.
Дляdouble
значения, отрицание не является тем же самым как вычитанием от нуля. Еслиx
+0.0
, тогда0.0
-x
равняется +0.0
, но -x
равняется -0.0
. Унарный минус просто инвертирует знак adouble
.
Особые случаи интереса:
Работа
Остатокdouble
Формат
drem
Формы
drem = 115 (0x73)
Стек операнда
..., value1, value2..., результат
Описание
И value1 и value2 должны иметь типdouble
. Значения выталкиваются от операнда, складывают и подвергаются преобразованию набора значений (§3.8.3), приводя к value1' и value2'. Результат вычисляется и продвигается на стек операнда как adouble
.
Результатом drem инструкции не является то же самое как та из так называемой работы остатка, определенной IEEE 754. Работа "остатка" IEEE 754 вычисляет остаток от округляющегося подразделения, не подразделения усечения, и таким образом, его поведение не походит на это обычного целочисленного оператора остатка. Вместо этого виртуальная машина Java определяет drem, чтобы вести себя способом, аналогичным той из целочисленных инструкций остатка виртуальной машины Java (irem и lrem); это может быть по сравнению с библиотечной функцией C fmod
.
Результатом drem инструкции управляют эти правила:
Несмотря на то, что подразделение нулем может произойти, оценка drem инструкции никогда не бросает исключение на этапе выполнения. Переполнение, потеря значимости, или потеря точности не могут произойти.
Примечания
Работа остатка IEEE 754 может быть вычислена библиотечной подпрограммой Math.IEEEremainder
.
Работа
Возвратитьсяdouble
от метода
Формат
dreturn
Формы
dreturn = 175 (0xaf)
Стек операнда
..., оцените [пустой]
Описание
У текущего метода должен быть тип возвратаdouble
. Значение должно иметь типdouble
. Если текущий метод является asynchronized
метод, монитор, полученный или повторно введенный на вызове метода, выпускается или выходится (соответственно) как будто выполнением monitorexit инструкции. Если никакое исключение не выдается, значение выталкивается от стека операнда текущего фрейма (§3.6) и подвергается преобразованию набора значений (§3.8.3), приводя к значению'. Значение' продвигается на стек операнда фрейма invoker. Любые другие значения на стеке операнда текущего метода отбрасываются.
Интерпретатор тогда возвращает управление invoker метода, восстанавливая фрейм invoker.
Исключения на этапе выполнения
Если текущий метод является asynchronized
метод и текущий поток не являются владельцем монитора, полученного или повторно введенного на вызове метода, dreturn бросаетIllegalMonitorStateException
. Это может произойти, например, если asynchronized
метод содержит monitorexit инструкцию, но никакую monitorenter инструкцию, на объекте, на котором синхронизируется метод.
Иначе, если реализация виртуальной машины осуществляет правила о структурированном использовании блокировок, описанных в §8.13 и если первое из тех правил нарушается во время вызова текущего метода, то dreturn бросает IllegalMonitorStateException
.
Работа
Хранилищеdouble
в локальную переменную
Формат
dstore индекс
Формы
dstore = 57 (0x39)
Стек операнда
..., значение...
Описание
Индекс является байтом без знака. И индекс и индекс + 1 должны быть индексами в массив локальной переменной текущего фрейма (§3.6). Значение на вершине стека операнда должно иметь тип double
. Это выталкивается от стека операнда и подвергается преобразованию набора значений (§3.8.3), приводя к значению'. Локальные переменные по индексу и индексу + 1 устанавливаются оценить'.
Примечания
dstore код операции может использоваться в соединении с широкой инструкцией, чтобы получить доступ к локальной переменной, используя двухбайтовый индекс без знака.
Работа
Хранилищеdouble
в локальную переменную
Формат
dstore _ <n>
Формы
dstore_0 = 71 (0x47) dstore_1 = 72 (0x48) dstore_2 = 73 (0x49) dstore_3 = 74 (0x4a)
Стек операнда
..., значение...
Описание
И <n> и <n> + 1 должны быть индексами в массив локальной переменной текущего фрейма (§3.6). Значение на вершине стека операнда должно иметь тип double
. Это выталкивается от стека операнда и подвергается преобразованию набора значений (§3.8.3), приводя к значению'. Локальные переменные в <n> и <n> + 1 устанавливаются оценить'.
Примечания
Каждый из dstore _ <n> инструкции является тем же самым как dstore с индексом <n>, за исключением того, что операнд <n> неявен.
Работа
Вычестьdouble
Формат
dsub
Формы
dsub = 103 (0x67)
Стек операнда
..., value1, value2..., результат
Описание
И value1 и value2 должны иметь типdouble
. Значения выталкиваются от операнда, складывают и подвергаются преобразованию набора значений (§3.8.3), приводя к value1' и value2'.double
результатом является value1' - value2'. Результат продвигается на стек операнда.
Дляdouble
вычитание, это всегда имеет место этоa
-b
приводит к тому же самому результату какa
+(-b
). Однако, для dsub инструкции, вычитание от нуля не является тем же самым как отрицанием, потому что еслиx
+0.0
, тогда0.0
-x
равняется +0.0
, но -x
равняется -0.0
.
Виртуальная машина Java требует поддержки постепенной потери значимости как определено IEEE 754. Несмотря на то, что переполнение, потеря значимости, или потеря точности могут произойти, выполнение dsub инструкции никогда не бросает исключение на этапе выполнения.
Работа
Копируйте главное значение стека операнда
Формат
дубликат
Формы
копируйте = 89 (0x59)
Стек операнда
..., значение..., значение, значение
Описание
Копируйте главное значение на операнде, складывают и продвигают дублированное значение на стек операнда.
Инструкция дубликата не должна использоваться, если значение не является значением категории 1 вычислительный тип (§3.11.1).
Работа
Копируйте главный стек операнда, оценивают и вставляют два значения вниз
Формат
dup_x1
Формы
dup_x1 = 90 (0x5a)
Стек операнда
..., value2, value1..., value1, value2, value1
Описание
Копируйте главное значение на операнде, складывают и вставляют дублированное значение два значения вниз в стеке операнда.
dup_x1 инструкция не должна использоваться, если и value1 и value2 не являются значениями категории 1 вычислительный тип (§3.11.1).
Работа
Копируйте главный стек операнда, оценивают и вставляют два или три значения вниз
Формат
dup_x2
Формы
dup_x2 = 91 (0x5b)
Стек операнда
Форма 1:
..., value3, value2, value1..., value1, value3, value2, value1
где value1, value2, и value3 являются всеми значениями категории 1 вычислительный тип (§3.11.1).
Форма 2:
..., value2, value1..., value1, value2, value1
где value1 является значением категории, 1 вычислительный тип и value2 являются значением категории 2 вычислительных типа (§3.11.1).
Описание
Копируйте главное значение на операнде, складывают и вставляют дублированное значение два или три значения вниз в стеке операнда.
Работа
Копируйте лучший или два значения стека операнда
Формат
dup2
Формы
dup2 = 92 (0x5c)
Стек операнда
Форма 1:
..., value2, value1..., value2, value1, value2, value1
где и value1 и value2 являются значениями категории 1 вычислительный тип (§3.11.1).
Форма 2:
..., значение..., значение, значение
где значение является значением категории 2 вычислительных типа (§3.11.1).
Описание
Копируйте лучший, или два значения на операнде складывают и продвигают дублированное значение, или оценивает назад на стек операнда в первоначальном заказе.
Работа
Копируйте лучший или два значения стека операнда и вставьте два или три значения вниз
Формат
dup2_x1
Формы
dup2_x1 = 93 (0x5d)
Стек операнда
Форма 1:
..., value3, value2, value1..., value2, value1, value3, value2, value1
где value1, value2, и value3 являются всеми значениями категории 1 вычислительный тип (§3.11.1).
Форма 2:
..., value2, value1..., value1, value2, value1
где value1 является значением категории, 2 вычислительных типа и value2 являются значением категории 1 вычислительный тип (§3.11.1).
Описание
Копируйте лучший, или два значения на операнде складывают и вставляют дублированные значения, в первоначальном заказе, одном значении ниже исходного значения или значениях в стеке операнда.
Работа
Копируйте лучший или два значения стека операнда и вставьте два, три, или четыре значения вниз
Формат
dup2_x2
Формы
dup2_x2 = 94 (0x5e)
Стек операнда
Форма 1:
..., value4, value3, value2, value1..., value2, value1, value4, value3, value2, value1
где value1, value2, value3, и value4 являются всеми значениями категории 1 вычислительный тип (§3.11.1).
Форма 2:
..., value3, value2, value1..., value1, value3, value2, value1
где value1 является значением категории, 2 вычислительных типа и value2 и value3 являются оба значениями категории 1 вычислительный тип (§3.11.1).
Форма 3:
..., value3, value2, value1..., value2, value1, value3, value2, value1
где value1 и value2 являются оба значениями категории, 1 вычислительный тип и value3 являются значением категории 2 вычислительных типа (§3.11.1).
Форма 4:
..., value2, value1..., value1, value2, value1
где value1 и value2 являются оба значениями категории 2 вычислительных типа (§3.11.1).
Описание
Копируйте лучший, или два значения на операнде складывают и вставляют дублированные значения, в первоначальном заказе, в стек операнда.
Содержание | Предыдущий | Следующий | Индекс
Спецификация Виртуальной машины JavaTM
Авторское право © Sun Microsystems, Inc 1999 года. Все права защищены
Пожалуйста, отправьте любые комментарии или исправления к jvm@java.sun.com