math

package
v0.0.0-...-26bd4cb Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 28, 2019 License: MIT Imports: 3 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type DAdd

type DAdd struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf dadd Page.509

格式: dadd 字节: 0x63 操作: 计算操作数栈顶两个double的和,并将结果推到操作数栈顶

..., value2, value1 ->
..., (value1+value2)

PS: value1 和 value2 都必须是double。特殊的计算规则(IEEE定义) 1. value1 或 value2 为 NaN 的时候,结果是 NaN 2. 相反符号无穷大相加 结果为 NaN - 3. 相同符号无穷大相加 结果为 当下符号的无穷大 4. 任何无穷大的数和非无穷大的数相加,结果为该无穷大 5. -0.0 + +0.0 = +0.0 6. -0.0 + -0.0 = -0.0 7. +0.0 + +0.0 = +0.0 8. 0.0 + 非0.0 = 非0.0 9. -x + +x = +0.0 10. 算数操作后可能会出现溢出(向上,向下),不抛异常(若 计算结果double无法表示,则会转成最相近的数) 术语定义:

Float 数格式:https://en.wikipedia.org/wiki/IEEE_754-1985#/media/File:IEEE_754_Single_Floating_Point_Format.svg
1. NaN: sign(1bit), exponent(8bits),fraction(23bit)
     sign = either 0 or 1.
     biased exponent = all 1 bits.
     fraction = anything except all 0 bits (since all 0 bits represents infinity).

func (*DAdd) Execute

func (this *DAdd) Execute(frame *rtda.Frame)

type DDiv

type DDiv struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf

格式: ddiv 字节: 0x6f 操作: 计算操作数栈顶两个double的和,并将结果推到操作数栈顶

..., value2, value1 />
..., (value2/value1)

PS: value1 和 value2 都必须是double。特殊的计算规则(IEEE定义)

value1 为 0 时,结果为无穷大

func (*DDiv) Execute

func (this *DDiv) Execute(frame *rtda.Frame)

type DMul

type DMul struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf

格式: dmul 字节: 0x6b 操作: 计算操作数栈顶两个double的和,并将结果推到操作数栈顶

..., value2, value1 ->
..., (value1*value2)

PS: value1 和 value2 都必须是double。特殊的计算规则(IEEE定义) 1. value1 或 value2 为 NaN 的时候,结果是 NaN 2. 都不是NaN时,若两个操作数符号相同,则结果符号为正,否则为负 3. 无穷大 * 0.0 = NaN 4. 任何无穷大的数和非无穷大的数相乘,结果为无穷大,符号由规则2定义 5. 算数操作后可能会出现溢出(向上,向下),不抛异常(若 计算结果float无法表示,则会转成最相近的数) 术语定义:

Float 数格式:https://en.wikipedia.org/wiki/IEEE_754-1985#/media/File:IEEE_754_Single_Floating_Point_Format.svg
1. NaN: sign(1bit), exponent(8bits),fraction(23bit)
     sign = either 0 or 1.
     biased exponent = all 1 bits.
     fraction = anything except all 0 bits (since all 0 bits represents infinity).

func (*DMul) Execute

func (this *DMul) Execute(frame *rtda.Frame)

type DNeg

type DNeg struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf

格式: dneg 字节: 0x77 操作: 弹出操作数栈顶的double取反后,并将结果推到操作数栈顶

..., value1 ->
..., (-value1)

func (*DNeg) Execute

func (this *DNeg) Execute(frame *rtda.Frame)

type DRem

type DRem struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf

格式: drem 字节: 0x73 操作: 计算操作数栈顶两个double的余数,并将结果推到操作数栈顶

..., value2, value1 ->
..., (value2 % value1)

PS: value1 和 value2 都必须是double。特殊的计算规则(IEEE定义)

func (*DRem) Execute

func (this *DRem) Execute(frame *rtda.Frame)

type DSub

type DSub struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf dsub Page.504

格式: dsub 字节: 0x67 操作: 计算操作数栈顶两个double的和,并将结果推到操作数栈顶

..., value2, value1 ->
..., (value2-value1)

PS: value1 和 value2 都必须是double。特殊的计算规则(IEEE定义) 等同 value2 + (-value1)

func (*DSub) Execute

func (this *DSub) Execute(frame *rtda.Frame)

type FAdd

type FAdd struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf fadd Page.509

格式: fadd 字节: 0x62 操作: 计算操作数栈顶两个flaot的和,并将结果推到操作数栈顶

..., value2, value1 ->
..., (value1+value2)

PS: value1 和 value2 都必须是float。特殊的计算规则(IEEE定义) 1. value1 或 value2 为 NaN 的时候,结果是 NaN 2. 相反符号无穷大相加 结果为 NaN - 3. 相同符号无穷大相加 结果为 当下符号的无穷大 4. 任何无穷大的数和非无穷大的数相加,结果为该无穷大 5. -0.0 + +0.0 = +0.0 6. -0.0 + -0.0 = -0.0 7. +0.0 + +0.0 = +0.0 8. 0.0 + 非0.0 = 非0.0 9. -x + +x = +0.0 10. 算数操作后可能会出现溢出(向上,向下),不抛异常(若 计算结果float无法表示,则会转成最相近的数) 术语定义:

Float 数格式:https://en.wikipedia.org/wiki/IEEE_754-1985#/media/File:IEEE_754_Single_Floating_Point_Format.svg
1. NaN: sign(1bit), exponent(8bits),fraction(23bit)
     sign = either 0 or 1.
     biased exponent = all 1 bits.
     fraction = anything except all 0 bits (since all 0 bits represents infinity).

func (*FAdd) Execute

func (this *FAdd) Execute(frame *rtda.Frame)

type FDiv

type FDiv struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf

格式: fdiv 字节: 0x6e 操作: 计算操作数栈顶两个flaot的和,并将结果推到操作数栈顶

..., value2, value1 />
..., (value2/value1)

PS: value1 和 value2 都必须是float。特殊的计算规则(IEEE定义)

value1 为 0 时,结果为无穷大

func (*FDiv) Execute

func (this *FDiv) Execute(frame *rtda.Frame)

type FMul

type FMul struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf

格式: fmul 字节: 0x6a 操作: 计算操作数栈顶两个flaot的和,并将结果推到操作数栈顶

..., value2, value1 ->
..., (value1*value2)

PS: value1 和 value2 都必须是float。特殊的计算规则(IEEE定义) 1. value1 或 value2 为 NaN 的时候,结果是 NaN 2. 都不是NaN时,若两个操作数符号相同,则结果符号为正,否则为负 3. 无穷大 * 0.0 = NaN 4. 任何无穷大的数和非无穷大的数相乘,结果为无穷大,符号由规则2定义 5. 算数操作后可能会出现溢出(向上,向下),不抛异常(若 计算结果float无法表示,则会转成最相近的数) 术语定义:

Float 数格式:https://en.wikipedia.org/wiki/IEEE_754-1985#/media/File:IEEE_754_Single_Floating_Point_Format.svg
1. NaN: sign(1bit), exponent(8bits),fraction(23bit)
     sign = either 0 or 1.
     biased exponent = all 1 bits.
     fraction = anything except all 0 bits (since all 0 bits represents infinity).

func (*FMul) Execute

func (this *FMul) Execute(frame *rtda.Frame)

type FNeg

type FNeg struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf

格式: fneg 字节: 0x76 操作: 弹出操作数栈顶的float取反后,并将结果推到操作数栈顶

..., value1 ->
..., (-value1)

func (*FNeg) Execute

func (this *FNeg) Execute(frame *rtda.Frame)

type FRem

type FRem struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf

格式: frem 字节: 0x72 操作: 计算操作数栈顶两个flaot的余数,并将结果推到操作数栈顶

..., value2, value1 ->
..., (value2%value1)

PS: value1 和 value2 都必须是float。特殊的计算规则(IEEE定义)

func (*FRem) Execute

func (this *FRem) Execute(frame *rtda.Frame)

type FSub

type FSub struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf fsub Page.503

格式: fsub 字节: 0x66 操作: 计算操作数栈顶两个flaot的和,并将结果推到操作数栈顶

..., value2, value1 ->
..., (value2-value1)

PS: value1 和 value2 都必须是float。特殊的计算规则(IEEE定义) 等同 value2 + (-value1)

func (*FSub) Execute

func (this *FSub) Execute(frame *rtda.Frame)

type IAdd

type IAdd struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf iadd Page.452

格式: iadd 字节: 0x60 操作: 计算操作数栈顶两个整数的和,并将结果推到操作数栈顶

..., value2, value1 ->
..., (value1+value2)

PS: value1 和 value2 都必须是整数,若发生溢出,则保留低 32位,溢出时不抛异常

func (*IAdd) Execute

func (this *IAdd) Execute(frame *rtda.Frame)

type IAnd

type IAnd struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf

格式: iand 字节: 0x7e 操作: 栈顶两个 int 型操作数做与操作

..., num2, num1 ->
..., (num2 & num1)

func (*IAnd) Execute

func (this *IAnd) Execute(frame *rtda.Frame)

type IDiv

type IDiv struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf

格式: idiv 字节: 0x6c 操作: 计算操作数栈顶两个整数的和,并将结果推到操作数栈顶

..., value2, value1 />
..., (value2/value1)

PS: value1 和 value2 都必须是整数,不能整除时,向 0 取整 当除数为 0 时抛 ArithmeticException 异常

func (*IDiv) Execute

func (this *IDiv) Execute(frame *rtda.Frame)

type IInc

type IInc struct {
	base.Index8Instruction
	Const int32
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf

格式: iinc [index] [const] (index, const 都是一字节) 字节: 0x84 0x01 0x02 // 给本地变量表下标为 1 的变量加上常量 2 操作: 给本地变量表下标为 index 的整型变量加上常量 const

func (*IInc) Execute

func (this *IInc) Execute(frame *rtda.Frame)

func (*IInc) FetchOperands

func (this *IInc) FetchOperands(reader *base.ByteCodeReader)

type IMul

type IMul struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf

格式: imul 字节: 0x68 操作: 计算操作数栈顶两个整数的和,并将结果推到操作数栈顶

..., value2, value1 ->
..., (value1*value2)

PS: value1 和 value2 都必须是整数,若发生溢出,则保留低 32位,溢出时不抛异常

func (*IMul) Execute

func (this *IMul) Execute(frame *rtda.Frame)

type INeg

type INeg struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf

格式: ineg 字节: 0x74 操作: 弹出操作数栈顶的整数取反后,并将结果推到操作数栈顶

..., value1 ->
..., (-value1)

func (*INeg) Execute

func (this *INeg) Execute(frame *rtda.Frame)

type IOr

type IOr struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf

格式: ior 字节: 0x80 操作: 栈顶两个 long 型操作数做或操作

..., num2, num1 ->
..., (num2 | num1)

func (*IOr) Execute

func (this *IOr) Execute(frame *rtda.Frame)

type IRem

type IRem struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf

格式: irem 字节: 0x70 操作: 计算操作数栈顶两个整数的余数,并将结果推到操作数栈顶

..., value2, value1 ->
..., (value2%value1)

PS: value1 和 value2 都必须是整数, 当除数为 0 时抛 ArithmeticException 异常

func (*IRem) Execute

func (this *IRem) Execute(frame *rtda.Frame)

type IShL

type IShL struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf

格式: ishl 字节: 0x78 操作: 将栈顶整型元素左移 bits 位

..., num, bits ->
..., (num << (bits & 0x1F))

PS: 因为是int,所以左移操作的位数不会超过 31,所以拿到 bits 后,截取后 5个bit 作为位移距离

func (*IShL) Execute

func (this *IShL) Execute(frame *rtda.Frame)

type IShR

type IShR struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf

格式: ishr 字节: 0x7a 操作: 将栈顶整型元素右移 bits 位(算数右移)

..., num, bits ->
..., (num >> (bits & 0x1F))

PS: 因为是int,所以位移操作的位数不会超过 31,所以拿到 bits 后,截取后 5个bit 作为位移距离

func (*IShR) Execute

func (this *IShR) Execute(frame *rtda.Frame)

type ISub

type ISub struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf isub Page.501

格式: isub 字节: 0x64 操作: 计算操作数栈顶两个整数的和,并将结果推到操作数栈顶

..., value2, value1 ->
..., (value2-value1)

PS: value1 和 value2 都必须是整数,若发生溢出,则保留低 32位,溢出时不抛异常

func (*ISub) Execute

func (this *ISub) Execute(frame *rtda.Frame)

type IUShR

type IUShR struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf

格式: iushr 字节: 0x7c 操作: 将栈顶整型元素逻辑右移 bits 位

..., num, bits ->
..., (num >> (bits & 0x1F))

PS: 因为是int,所以位移操作的位数不会超过 31,所以拿到 bits 后,截取后 5个bit 作为位移距离

func (*IUShR) Execute

func (this *IUShR) Execute(frame *rtda.Frame)

type IXOr

type IXOr struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf

格式: ixor 字节: 0x82 操作: 栈顶两个 int 型操作数做异或操作

..., num2, num1 ->
..., (num2 ^ num1)

func (*IXOr) Execute

func (this *IXOr) Execute(frame *rtda.Frame)

type LAdd

type LAdd struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf ladd Page.509

格式: ladd 字节: 0x61 操作: 计算操作数栈顶两个long型整数的和,并将结果推到操作数栈顶

..., value2, value1 ->
..., (value1+value2)

PS: value1 和 value2 都必须是long,若发生溢出,则保留低 64位,溢出时不抛异常

func (*LAdd) Execute

func (this *LAdd) Execute(frame *rtda.Frame)

type LAnd

type LAnd struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf

格式: land 字节: 0x7f 操作: 栈顶两个 long 型操作数做与操作

..., num2, num1 ->
..., (num2 & num1)

func (*LAnd) Execute

func (this *LAnd) Execute(frame *rtda.Frame)

type LDiv

type LDiv struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf

格式: ldiv 字节: 0x6d 操作: 计算操作数栈顶两个long型整数的和,并将结果推到操作数栈顶

..., value2, value1 />
..., (value2/value1)

PS: value1 和 value2 都必须是long,若发生溢出,则保留低 64位,溢出时不抛异常

func (*LDiv) Execute

func (this *LDiv) Execute(frame *rtda.Frame)

type LMul

type LMul struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf

格式: lmul 字节: 0x69 操作: 计算操作数栈顶两个long型整数的和,并将结果推到操作数栈顶

..., value2, value1 ->
..., (value1*value2)

PS: value1 和 value2 都必须是long,若发生溢出,则保留低 64位,溢出时不抛异常

func (*LMul) Execute

func (this *LMul) Execute(frame *rtda.Frame)

type LNeg

type LNeg struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf

格式: lneg 字节: 0x75 操作: 弹出操作数栈顶的long取反后,并将结果推到操作数栈顶

..., value1 ->
..., (-value1)

func (*LNeg) Execute

func (this *LNeg) Execute(frame *rtda.Frame)

type LOr

type LOr struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf

格式: lor 字节: 0x81 操作: 栈顶两个 long 型操作数做或操作

..., num2, num1 ->
..., (num2 | num1)

func (*LOr) Execute

func (this *LOr) Execute(frame *rtda.Frame)

type LRem

type LRem struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf

格式: lrem 字节: 0x71 操作: 计算操作数栈顶两个long型整数的余数,并将结果推到操作数栈顶

..., value2, value1 ->
..., (value2%value1)

PS: value1 和 value2 都必须是long

func (*LRem) Execute

func (this *LRem) Execute(frame *rtda.Frame)

type LShL

type LShL struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf

格式: lshl 字节: 0x79 操作: 将栈顶long型元素左移 bits 位

..., num, bits ->
..., (num << (bits & 0x3F))

PS: num 是 long,bits是 int,左移操作的位数不会超过 63,所以拿到 bits 后,截取后 6个bit 作为位移距离

func (*LShL) Execute

func (this *LShL) Execute(frame *rtda.Frame)

type LShR

type LShR struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf

格式: lshr 字节: 0x7b 操作: 将栈顶long型元素右移 bits 位(算数右移)

..., num, bits ->
..., (num >> (bits & 0x3F))

PS: num 是 long,bits是 int,左移操作的位数不会超过 63,所以拿到 bits 后,截取后 6个bit 作为位移距离

func (*LShR) Execute

func (this *LShR) Execute(frame *rtda.Frame)

type LSub

type LSub struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf lsub Page.502

格式: lsub 字节: 0x65 操作: 计算操作数栈顶两个long型整数的和,并将结果推到操作数栈顶

..., value2, value1 ->
..., (value2-value1)

PS: value1 和 value2 都必须是long,若发生溢出,则保留低 64位,溢出时不抛异常

func (*LSub) Execute

func (this *LSub) Execute(frame *rtda.Frame)

type LUShR

type LUShR struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf

格式: lushr 字节: 0x7d 操作: 将栈顶long型元素逻辑右移 bits 位

..., num, bits ->
..., (num >> (bits & 0x3F))

PS: num 是 long,bits是 int,左移操作的位数不会超过 63,所以拿到 bits 后,截取后 6个bit 作为位移距离

func (*LUShR) Execute

func (this *LUShR) Execute(frame *rtda.Frame)

type LXOr

type LXOr struct {
	base.NoOperandsInstruction
}

指令定义来源 The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf

格式: land 字节: 0x83 操作: 栈顶两个 long 型操作数做异或操作

..., num2, num1 ->
..., (num2 ^ num1)

func (*LXOr) Execute

func (this *LXOr) Execute(frame *rtda.Frame)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL