public final class StrictMath extends Object
StrictMath包含用于执行基本的数字运算等基本指数、对数、平方根法、三角函数。
为保证java程序的可移植性,在这个包中的一些数值函数的定义需要他们产生相同的结果作为一定的算法。这些算法可从知名网络图书馆netlib为包“自由分配的数学库,“fdlibm。这些算法,这是用C语言编程,则可以理解为执行所有浮点操作遵循java浮点运算规则。
java数学库是相对于fdlibm版本5.3定义。在fdlibm提供一种功能多个定义(如acos),使用“IEEE 754的核心功能”版(居住在文件名的开头字母e)。该方法需要fdlibm语义sin,cos,tan,asin,acos,atan,exp,log,log10,cbrt,atan2,pow,sinh,cosh,tanh,hypot,expm1,和log1p。
该平台采用带符号的二进制补码整数运算与int和long的原始类型。开发人员应该选择原始类型,以确保算术运算始终产生正确的结果,在某些情况下,这意味着操作不会溢出的计算值的范围内。最好的做法是选择原始类型和算法,以避免溢出。在规模int或long和溢出错误需要被检测的情况下,该方法addExact,subtractExact,multiplyExact,和toIntExact抛出ArithmeticException当结果溢出。对于其他算术运算,如划分,绝对值,增量,递减,和否定溢出只发生一个特定的最小值或最大值,并应以适当的最小或最大值检查。
| Modifier and Type | Field and Description |
|---|---|
static double |
E
的
double值比任何其他的努尔紧密,自然对数的基础。
|
static double |
PI
的
double值比其他任何接近零圆周率,圆周和直径的比值。
|
| Modifier and Type | Method and Description |
|---|---|
static double |
abs(double a)
返回一个
double值的绝对值。
|
static float |
abs(float a)
返回一个
float值的绝对值。
|
static int |
abs(int a)
返回一个值的绝对值
int。
|
static long |
abs(long a)
返回一个
long值的绝对值。
|
static double |
acos(double a)
返回一个值的余弦;返回的角度范围在0到零圆周率。
|
static int |
addExact(int x, int y)
返回参数的总和,抛出一个异常,如果结果溢出一个
int。
|
static long |
addExact(long x, long y)
返回参数的总和,抛出一个异常,如果结果溢出
long。
|
static double |
asin(double a)
返回一个值的圆弧正弦;返回的角度范围在零圆周率/ 2通过空圆周率/ 2。
|
static double |
atan(double a)
返回一个值的反正切值;返回的角度范围在零圆周率/ 2通过空圆周率/ 2。
|
static double |
atan2(double y, double x)
返回从直角坐标转换角空θ(
x,
y)极坐标(r, 空θ)。
|
static double |
cbrt(double a)
返回一个值
double立方根。
|
static double |
ceil(double a)
返回最小(接近负无穷大)
double值是大于或等于的说法,等于一个数学整数。
|
static double |
copySign(double magnitude, double sign)
用第二个浮点参数的符号返回第一个浮点参数。
|
static float |
copySign(float magnitude, float sign)
用第二个浮点参数的符号返回第一个浮点参数。
|
static double |
cos(double a)
返回一个角度的三角余弦。
|
static double |
cosh(double x)
返回一个
double双曲余弦值。
|
static double |
exp(double a)
返回欧拉数努尔提升到一
double价值动力。
|
static double |
expm1(double x)
返回nulle
X - 1。
|
static double |
floor(double a)
收益最大(最接近正无穷大)
double值小于或等于该参数等于数学整数。
|
static int |
floorDiv(int x, int y)
收益最大(最接近正无穷大)
int值小于或等于代数商。
|
static long |
floorDiv(long x, long y)
收益最大(最接近正无穷大)
long值小于或等于代数商。
|
static int |
floorMod(int x, int y)
返回参数的
int地板模数。
|
static long |
floorMod(long x, long y)
返回参数的
long地板模数。
|
static int |
getExponent(double d)
返回用于表示一个
double偏指数。
|
static int |
getExponent(float f)
返回用于表示一个
float偏指数。
|
static double |
hypot(double x, double y)
返回sqrt(nullx
二 + nully
二)没有中间的上溢或下溢。
|
static double |
IEEEremainder(double f1, double f2)
计算剩余操作两参数由IEEE 754标准规定。
|
static double |
log(double a)
收益率的自然对数(基地努尔)一
double价值。
|
static double |
log10(double a)
返回以10为底的对数的一
double价值。
|
static double |
log1p(double x)
返回参数和1的总和的自然对数。
|
static double |
max(double a, double b)
返回两个
double值越大。
|
static float |
max(float a, float b)
返回两个
float值越大。
|
static int |
max(int a, int b)
返回两个
int值越大。
|
static long |
max(long a, long b)
返回两个
long值越大。
|
static double |
min(double a, double b)
返回两个
double值较小。
|
static float |
min(float a, float b)
返回两个
float值较小。
|
static int |
min(int a, int b)
返回两个
int值较小。
|
static long |
min(long a, long b)
返回两个
long值较小。
|
static int |
multiplyExact(int x, int y)
返回参数的产品,抛出一个异常,如果结果溢出一个
int。
|
static long |
multiplyExact(long x, long y)
返回参数的产品,抛出一个异常,如果结果溢出
long。
|
static double |
nextAfter(double start, double direction)
返回在第二个参数的方向上与第一个参数相邻的浮点数。
|
static float |
nextAfter(float start, double direction)
返回在第二个参数的方向上与第一个参数相邻的浮点数。
|
static double |
nextDown(double d)
返回邻近
d在负无穷大的方向的浮点值。
|
static float |
nextDown(float f)
返回邻近
f在负无穷大的方向的浮点值。
|
static double |
nextUp(double d)
返回邻近
d在正无穷大方向的浮点值。
|
static float |
nextUp(float f)
返回在正无穷大的方向
f相邻的浮点值。
|
static double |
pow(double a, double b)
返回将第一个参数的值提高到第二个参数的功率。
|
static double |
random()
返回一个
double值与一个积极的迹象,大于或等于
0.0小于
1.0。
|
static double |
rint(double a)
返回
double值是在最接近的值的参数,相当于一个数学整数。
|
static long |
round(double a)
返回最近的
long的说法,与舍入到正无穷。
|
static int |
round(float a)
返回最近的
int的说法,与舍入到正无穷。
|
static double |
scalb(double d, int scaleFactor)
返回
d×2
scaleFactor圆润好像由一个单一的正确舍入的浮点乘法的双重价值的成员组。
|
static float |
scalb(float f, int scaleFactor)
返回
f×2
scaleFactor圆润好像由一个单一的正确舍入的浮点乘法的float值集成员。
|
static double |
signum(double d)
返回自变量的符号函数;零如果参数为零,1如果参数大于零,1如果参数小于零。
|
static float |
signum(float f)
返回自变量的符号函数;零如果参数为零,1.0f如果参数大于零,-1.0f如果参数小于零。
|
static double |
sin(double a)
返回一个角度的三角正弦。
|
static double |
sinh(double x)
返回一个
double的双曲正弦值。
|
static double |
sqrt(double a)
返回正平方根入一
double价值。
|
static int |
subtractExact(int x, int y)
返回参数的差异,抛出一个异常,如果结果溢出一个
int。
|
static long |
subtractExact(long x, long y)
返回参数的差异,抛出一个异常,如果结果溢出
long。
|
static double |
tan(double a)
返回一个角的三角切线。
|
static double |
tanh(double x)
返回一个
double的双曲正切值。
|
static double |
toDegrees(double angrad)
将一个测量角度弧度近似等效的角度衡量度。
|
static int |
toIntExact(long value)
返回的
long参数的值;抛出一个异常,如果值溢出一个
int。
|
static double |
toRadians(double angdeg)
转换一个角度衡量度的近似等效用弧度测量的角。
|
static double |
ulp(double d)
返回一个小规模的争论。
|
static float |
ulp(float f)
返回一个小规模的争论。
|
public static final double E
double值比任何其他的努尔紧密,自然对数的基础。
public static final double PI
double值比其他任何接近零圆周率,圆周和直径的比值。
public static double sin(double a)
a -角度、弧度。
public static double cos(double a)
a -角度、弧度。
public static double tan(double a)
a -角度、弧度。
public static double asin(double a)
a的弧弦是要返回的值。
public static double acos(double a)
a的余弦是要返回的值。
public static double atan(double a)
a的圆弧切线是要返回的值。
public static double toRadians(double angdeg)
angdeg一角,度
angdeg测量。
public static double toDegrees(double angrad)
cos(toRadians(90.0))完全平等的
0.0。
angrad -角度、弧度
angrad测量。
public static double exp(double a)
double价值动力。特殊情况:
a -指数提高到努尔。
a,哪里努尔是自然对数的底数。
public static double log(double a)
double价值。特殊情况:
a -价值
a,
a的自然对数。
public static double log10(double a)
double价值。特殊情况:
a -价值
a。
public static double sqrt(double a)
double价值。特殊情况:
double。
a -价值。
a正平方根。
public static double cbrt(double a)
double立方根。正有限
x,
cbrt(-x) == -cbrt(x);就是一个负值的立方根是负的立方根,价值的大小。特殊情况:
a -价值。
a立方根。
public static double IEEEremainder(double f1,
double f2)
f1 - f2 × nulln,哪里nulln最接近的商
f1/f2精确数学价值的数学整数,如果两个数学整数同样接近
f1/f2,然后nulln是整数,甚至。如果其余为零,它的符号与第一个参数的符号相同。特殊情况:
f1 -股息。
f2 -除数。
f1除以
f2。
public static double ceil(double a)
double值是大于或等于的说法,等于一个数学整数。特殊情况:
StrictMath.ceil(x)价值正是
-StrictMath.floor(-x)价值。
a -价值。
public static double floor(double a)
double值小于或等于该参数等于数学整数。特殊情况:
a -价值。
public static double rint(double a)
double值是在最接近的值的参数,相当于一个数学整数。如果两
double值是数学整数同样接近这个参数的值,结果甚至是整数值。特殊情况:
a -价值。
a等于数学整数。
public static double atan2(double y,
double x)
x,
y)极坐标(r, 空θ)。这种方法计算的零相位θ计算反正切的
y/x范围中的空对空圆周率圆周率。特殊情况:
double值接近零圆周率。double价值。double价值。double值接近零圆周率/ 2。double价值。double价值。double值接近零圆周率/ 4。double价值。y -纵坐标
x -横坐标坐标
public static double pow(double a,
double b)
double价值。(在前面的描述中,浮点值是当且仅当它是有限的,一个固定点的方法ceil或者,等价地,一个固定点的方法floor。值是一个固定点一一论证方法如果运用方法值的结果是相等的该值是一个整数)。
a基。
b -指数。
a
b。
public static int round(float a)
int的说法,与舍入到正无穷。
特殊情况:
Integer.MIN_VALUE值,结果等于Integer.MIN_VALUE价值。Integer.MAX_VALUE值,结果等于Integer.MAX_VALUE价值。a -一个浮点值被舍入到整数。
int价值。
Integer.MAX_VALUE,
Integer.MIN_VALUE
public static long round(double a)
long的说法,与舍入到正无穷。
特殊情况:
Long.MIN_VALUE值,结果等于Long.MIN_VALUE价值。Long.MAX_VALUE值,结果等于Long.MAX_VALUE价值。a -一个浮点值被舍入到
long。
long价值。
Long.MAX_VALUE,
Long.MIN_VALUE
public static double random()
double值与一个积极的迹象,大于或等于
0.0小于
1.0。返回值的选择与伪随机(大约),范围分布均匀。
第一次调用该方法时,它将创建一个新的伪随机数发生器,完全象的表达
new java.util.Random()
这个新的伪随机数发生器是用此后所有调用此方法并用于其他地方。
此方法是正确同步的,以允许通过一个以上的线程正确使用。然而,如果多个线程需要一个伟大的速度生成伪随机数,它可以减少每个线程都有它自己的伪随机数发生器的争夺。
double大于或等于和小于
1.0
0.0。
Random.nextDouble()
public static int addExact(int x,
int y)
int。
x -第一价值
y -二值
ArithmeticException -如果结果溢出int
Math.addExact(int,int)
public static long addExact(long x,
long y)
long。
x -第一价值
y -二值
ArithmeticException -如果结果溢出长
Math.addExact(long,long)
public static int subtractExact(int x,
int y)
int。
x -第一价值
y -减去第二值
ArithmeticException -如果结果溢出int
Math.subtractExact(int,int)
public static long subtractExact(long x,
long y)
long。
x -第一价值
y -减去第二值
ArithmeticException -如果结果溢出长
Math.subtractExact(long,long)
public static int multiplyExact(int x,
int y)
int。
x -第一价值
y -二值
ArithmeticException -如果结果溢出int
Math.multiplyExact(int,int)
public static long multiplyExact(long x,
long y)
long。
x -第一价值
y -二值
ArithmeticException -如果结果溢出长
Math.multiplyExact(long,long)
public static int toIntExact(long value)
long参数的值;抛出一个异常,如果值溢出一个
int。
value -长值
ArithmeticException -如果
argument溢出int
Math.toIntExact(long)
public static int floorDiv(int x,
int y)
int值小于或等于代数商。有一个特殊的情况下,如果股息是
Integer.MIN_VALUE和除数是
-1,然后整数溢出时,结果是等于
Integer.MIN_VALUE。
看到的例子和比较整数除法运算符Math.floorDiv /。
x -股息
y -除数
int值小于或等于代数商。
y
ArithmeticException除数为零
Math.floorDiv(int, int),
Math.floor(double)
public static long floorDiv(long x,
long y)
long值小于或等于代数商。有一个特殊的情况下,如果股息是
Long.MIN_VALUE和除数是
-1,然后整数溢出时,结果是等于
Long.MIN_VALUE。
看到的例子和比较整数除法运算符Math.floorDiv /。
x -股息
y -除数
long值小于或等于代数商。
y
ArithmeticException除数为零
Math.floorDiv(long, long),
Math.floor(double)
public static int floorMod(int x,
int y)
int地板模数。
地板弹性模量x - (floorDiv(x, y) * y),具有相同的符号作为除数y,并在-abs(y) < r < +abs(y)范围。
floorDiv和floorMod之间的关系是这样的:
floorDiv(x, y) * y + floorMod(x, y) == x看到的例子和比较的%算子Math.floorMod。
x -股息
y -除数
x - (floorDiv(x, y) * y)
y
ArithmeticException除数为零
Math.floorMod(int, int),
floorDiv(int, int)
public static long floorMod(long x,
long y)
long地板模数。
地板弹性模量x - (floorDiv(x, y) * y),具有相同的符号作为除数y,并在-abs(y) < r < +abs(y)范围。
floorDiv和floorMod之间的关系是这样的:
floorDiv(x, y) * y + floorMod(x, y) == x看到的例子和比较的%算子Math.floorMod。
x -股息
y -除数
x - (floorDiv(x, y) * y)
y
ArithmeticException除数为零
Math.floorMod(long, long),
floorDiv(long, long)
public static int abs(int a)
int。如果参数不是否定的,则返回参数。如果参数是否定的,则返回参数的否定。
注意:如果参数等于Integer.MIN_VALUE价值,最负int值表示,其结果是相同的值,这是消极的。
a -参数的绝对值是确定的。
public static long abs(long a)
long值的绝对值。如果参数不是否定的,则返回参数。如果参数是否定的,则返回参数的否定。
注意:如果参数等于Long.MIN_VALUE价值,最负long值表示,其结果是相同的值,这是消极的。
a -参数的绝对值是确定的。
public static float abs(float a)
float值的绝对值。如果参数不是否定的,则返回参数。如果参数是否定的,则返回参数的否定。特殊情况:
Float.intBitsToFloat(0x7fffffff & Float.floatToIntBits(a))
a -参数的绝对值是确定的
public static double abs(double a)
double值的绝对值。如果参数不是否定的,则返回参数。如果参数是否定的,则返回参数的否定。特殊情况:换句话说
Double.longBitsToDouble((Double.doubleToLongBits(a)<<1)>>>1)
a -参数的绝对值是确定的
public static int max(int a,
int b)
int值越大。就是说,结果是参数接近
Integer.MAX_VALUE价值。如果参数具有相同的值,结果是相同的值。
a -争论。
b -另一种说法。
a较大和
b。
public static long max(long a,
long b)
long值越大。就是说,结果是参数接近
Long.MAX_VALUE价值。如果参数具有相同的值,结果是相同的值。
a -争论。
b -另一种说法。
a和
b较大。
public static float max(float a,
float b)
float值越大。也就是说,结果是参数更接近正无穷大。如果参数具有相同的值,结果是相同的值。如果这两值是楠,那么结果就是楠。与数值比较运算符,这种方法认为负零是严格小于正零。如果一个参数是正零和另一个负零,则结果为正零。
a -争论。
b -另一种说法。
a和
b较大。
public static double max(double a,
double b)
double值越大。也就是说,结果是参数更接近正无穷大。如果参数具有相同的值,结果是相同的值。如果这两值是楠,那么结果就是楠。与数值比较运算符,这种方法认为负零是严格小于正零。如果一个参数是正零和另一个负零,则结果为正零。
a -争论。
b -另一种说法。
a和
b较大。
public static int min(int a,
int b)
int值较小。那就是结果的说法更接近
Integer.MIN_VALUE值。如果参数具有相同的值,结果是相同的值。
a -争论。
b -另一种说法。
a和
b较小。
public static long min(long a,
long b)
long值较小。就是说,结果是参数接近
Long.MIN_VALUE价值。如果参数具有相同的值,结果是相同的值。
a -争论。
b -另一种说法。
a和
b较小。
public static float min(float a,
float b)
float值较小。也就是说,结果是接近负无穷大的值。如果参数具有相同的值,结果是相同的值。如果这两值是楠,那么结果就是楠。与数值比较运算符,这种方法认为负零是严格小于正零。如果一个参数是正零和另一个是负零,则结果为负零。
a -争论。
b -另一种说法。
a和
b.较小
public static double min(double a,
double b)
double值较小。也就是说,结果是接近负无穷大的值。如果参数具有相同的值,结果是相同的值。如果这两值是楠,那么结果就是楠。与数值比较运算符,这种方法认为负零是严格小于正零。如果一个参数是正零和另一个是负零,则结果为负零。
a -争论。
b -另一种说法。
a和
b较小。
public static double ulp(double d)
double值是正距离这个浮点值和
double价值的下一个较大的幅度之间。注意,非南nullx,
ulp(-x) == ulp(x)。
特殊情况:
Double.MIN_VALUE。Double.MAX_VALUE,然后结果等于2九百七十一。d -浮点值的ULP要返回
public static float ulp(float f)
float值是正距离这个浮点值和
float价值的下一个较大的幅度之间。注意,非南nullx,
ulp(-x) == ulp(x)。
特殊情况:
Float.MIN_VALUE。Float.MAX_VALUE,然后结果等于2一百零四。f -浮点值的ULP要返回
public static double signum(double d)
特殊情况:
d -浮点值的正负号要回来
public static float signum(float f)
特殊情况:
f -浮点值的正负号要回来
public static double sinh(double x)
double的双曲正弦值。对nullx双曲正弦定义为(nullenullx - enullx)/ 2,努尔是
Euler's number。
特殊情况:
x -数的双曲正弦函数要返回。
x双曲正弦。
public static double cosh(double x)
double双曲余弦值。对nullx双曲余弦的定义是(nullenullx + enullx)/ 2,努尔是
Euler's number。
特殊情况:
1.0。x -数的双曲余弦值被返回。
x双曲余弦。
public static double tanh(double x)
double的双曲正切值。对nullx双曲正切的定义是(nullenullx - enullx)/(nullenullx + enullx),换句话说,
sinh(x) /
cosh(x)。注意:确切的tanh函数的绝对值总是小于1。
特殊情况:
+1.0。-1.0。x -数的双曲正切要返回。
x双曲正切。
public static double hypot(double x,
double y)
特殊情况:
x -价值
y -价值
public static double expm1(double x)
expm1(x) + 1准确的数字是更接近真实的结果比
exp(x) nulle
X。
特殊情况:
x -指数提高努尔在nulle
x -计算1。
x - 1。
public static double log1p(double x)
x,
log1p(x)结果更接近于真实结果LN(1 +
x)比
log(1.0+x)浮点评价。
特殊情况:
x -价值
x + 1),对
x + 1的自然对数
public static double copySign(double magnitude,
double sign)
sign论点是如果它是正面的。
magnitude -参数提供结果的大小
sign -参数提供结果的符号
magnitude大小和
sign符号价值。
public static float copySign(float magnitude,
float sign)
sign论点是如果它是正面的。
magnitude -参数提供结果的大小
sign -参数提供结果的符号
magnitude大小和
sign符号价值。
public static int getExponent(float f)
float偏指数。特殊情况:
Float.MAX_EXPONENT + 1。Float.MIN_EXPONENT - 1。f -
float价值
public static int getExponent(double d)
double偏指数。特殊情况:
Double.MAX_EXPONENT + 1。Double.MIN_EXPONENT - 1。d -
double价值
public static double nextAfter(double start,
double direction)
特殊情况:
direction返回不变(所隐含的要求返回第二个参数,如果参数相等)。start是±Double.MIN_VALUE和direction有价值的结果,应该有一个更小的大小,然后一零相同的标志start返回。start无限direction有价值的结果,应该有一个更小的大小,用相同的符号Double.MAX_VALUE作为start返回。start等于±Double.MAX_VALUE和direction有价值的结果,应该有一个大的幅度,一个无穷大符号相同start返回。start启动浮点值
direction值指示哪
start的邻居或
start应该归还
direction方向相邻
start。
public static float nextAfter(float start,
double direction)
特殊情况:
direction返回。start是±Float.MIN_VALUE和direction有价值的结果,应该有一个更小的大小,然后一零相同的标志start返回。start无限direction有价值的结果,应该有一个更小的幅度,Float.MAX_VALUE具有相同的符号start返回。start等于±Float.MAX_VALUE和direction有价值的结果,应该有一个大的幅度,一个无穷大符号相同start返回。start启动浮点值
direction值指示哪
start的邻居或
start应该归还
start在
direction方向相邻的浮点数。
public static double nextUp(double d)
d相邻的浮点值。这种方法是语义上等同于
nextAfter(d, Double.POSITIVE_INFINITY);然而,一个
nextUp实施可能比其等效
nextAfter叫更快。
特殊情况:
Double.MIN_VALUEd启动浮点值
public static float nextUp(float f)
f相邻的浮点值。这种方法是语义上等同于
nextAfter(f, Float.POSITIVE_INFINITY);然而,一个
nextUp实施可能比其等效
nextAfter叫更快。
特殊情况:
Float.MIN_VALUEf启动浮点值
public static double nextDown(double d)
d相邻的浮点值。这种方法是语义上等同于
nextAfter(d, Double.NEGATIVE_INFINITY);然而,一个
nextDown实施可能比其等效
nextAfter叫更快。
特殊情况:
-Double.MIN_VALUEd启动浮点值
public static float nextDown(float f)
f在负无穷大的方向的浮点值。这种方法是语义上等同于
nextAfter(f, Float.NEGATIVE_INFINITY);然而,一个
nextDown实施可能比其等效
nextAfter叫更快。
特殊情况:
-Float.MIN_VALUEf启动浮点值
public static double scalb(double d,
int scaleFactor)
d×2
scaleFactor圆润好像由一个单一的正确舍入的浮点乘法的双重价值的成员组。看到一个浮点值集的java语言规范的探讨。如果结果指数是
Double.MIN_EXPONENT和
Double.MAX_EXPONENT之间,答案是精确计算。如果结果的指数将大于
Double.MAX_EXPONENT,无限返回。注意,如果结果是正常的,精度可能会丢失;即,当
scalb(x, n)是不正常的,
scalb(scalb(x, n), -n)可能不等于nullx。当结果是非南,结果具有相同的符号
d。
特殊情况:
d数是由一个功率两尺度。
scaleFactor用于规模
d 2功率
d×2
scaleFactor
public static float scalb(float f,
int scaleFactor)
f×2
scaleFactor圆润好像由一个单一的正确舍入的浮点乘法的float值集成员。看到一个浮点值集的java语言规范的探讨。如果结果指数是
Float.MIN_EXPONENT和
Float.MAX_EXPONENT之间,答案是精确计算。如果结果的指数将大于
Float.MAX_EXPONENT,无限返回。注意,如果结果是正常的,精度可能会丢失;即,当
scalb(x, n)是不正常的,
scalb(scalb(x, n), -n)可能不等于nullx。当结果是非南,结果具有相同的符号
特殊情况:
f。
f数是由一个功率两尺度。
scaleFactor用于规模
f 2功率
f×2
scaleFactor
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.