7092404: Add Math.nextDown and Double.isFinite
Reviewed-by: mduigou
This commit is contained in:
parent
035522bd7a
commit
82e488e3ae
jdk
src/share/classes
test/java
lang
Double
Math
util/Formatter
Basic-X.java.templateBasicBigDecimal.javaBasicBigInteger.javaBasicBoolean.javaBasicBooleanObject.javaBasicByte.javaBasicByteObject.javaBasicChar.javaBasicCharObject.javaBasicDateTime.javaBasicDouble.javaBasicDoubleObject.javaBasicFloat.javaBasicFloatObject.javaBasicInt.javaBasicIntObject.javaBasicLong.javaBasicLongObject.javaBasicShort.javaBasicShortObject.java
@ -276,7 +276,7 @@ public final class Double extends Number implements Comparable<Double> {
|
|||||||
* 7.19.6.1; however, the output of this method is more
|
* 7.19.6.1; however, the output of this method is more
|
||||||
* tightly specified.
|
* tightly specified.
|
||||||
*/
|
*/
|
||||||
if (!FpUtils.isFinite(d) )
|
if (!isFinite(d) )
|
||||||
// For infinity and NaN, use the decimal output.
|
// For infinity and NaN, use the decimal output.
|
||||||
return Double.toString(d);
|
return Double.toString(d);
|
||||||
else {
|
else {
|
||||||
@ -548,7 +548,7 @@ public final class Double extends Number implements Comparable<Double> {
|
|||||||
* @return {@code true} if the value of the argument is NaN;
|
* @return {@code true} if the value of the argument is NaN;
|
||||||
* {@code false} otherwise.
|
* {@code false} otherwise.
|
||||||
*/
|
*/
|
||||||
static public boolean isNaN(double v) {
|
public static boolean isNaN(double v) {
|
||||||
return (v != v);
|
return (v != v);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -560,10 +560,24 @@ public final class Double extends Number implements Comparable<Double> {
|
|||||||
* @return {@code true} if the value of the argument is positive
|
* @return {@code true} if the value of the argument is positive
|
||||||
* infinity or negative infinity; {@code false} otherwise.
|
* infinity or negative infinity; {@code false} otherwise.
|
||||||
*/
|
*/
|
||||||
static public boolean isInfinite(double v) {
|
public static boolean isInfinite(double v) {
|
||||||
return (v == POSITIVE_INFINITY) || (v == NEGATIVE_INFINITY);
|
return (v == POSITIVE_INFINITY) || (v == NEGATIVE_INFINITY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns {@code true} if the argument is a finite floating-point
|
||||||
|
* value; returns {@code false} otherwise (for NaN and infinity
|
||||||
|
* arguments).
|
||||||
|
*
|
||||||
|
* @param d the {@code double} value to be tested
|
||||||
|
* @return {@code true} if the argument is a finite
|
||||||
|
* floating-point value, {@code false} otherwise.
|
||||||
|
* @since 1.8
|
||||||
|
*/
|
||||||
|
public static boolean isFinite(double d) {
|
||||||
|
return Math.abs(d) <= DoubleConsts.MAX_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The value of the Double.
|
* The value of the Double.
|
||||||
*
|
*
|
||||||
|
@ -459,7 +459,7 @@ public final class Float extends Number implements Comparable<Float> {
|
|||||||
* @return {@code true} if the argument is NaN;
|
* @return {@code true} if the argument is NaN;
|
||||||
* {@code false} otherwise.
|
* {@code false} otherwise.
|
||||||
*/
|
*/
|
||||||
static public boolean isNaN(float v) {
|
public static boolean isNaN(float v) {
|
||||||
return (v != v);
|
return (v != v);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -471,10 +471,25 @@ public final class Float extends Number implements Comparable<Float> {
|
|||||||
* @return {@code true} if the argument is positive infinity or
|
* @return {@code true} if the argument is positive infinity or
|
||||||
* negative infinity; {@code false} otherwise.
|
* negative infinity; {@code false} otherwise.
|
||||||
*/
|
*/
|
||||||
static public boolean isInfinite(float v) {
|
public static boolean isInfinite(float v) {
|
||||||
return (v == POSITIVE_INFINITY) || (v == NEGATIVE_INFINITY);
|
return (v == POSITIVE_INFINITY) || (v == NEGATIVE_INFINITY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns {@code true} if the argument is a finite floating-point
|
||||||
|
* value; returns {@code false} otherwise (for NaN and infinity
|
||||||
|
* arguments).
|
||||||
|
*
|
||||||
|
* @param f the {@code float} value to be tested
|
||||||
|
* @return {@code true} if the argument is a finite
|
||||||
|
* floating-point value, {@code false} otherwise.
|
||||||
|
* @since 1.8
|
||||||
|
*/
|
||||||
|
public static boolean isFinite(float f) {
|
||||||
|
return Math.abs(f) <= FloatConsts.MAX_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The value of the Float.
|
* The value of the Float.
|
||||||
*
|
*
|
||||||
|
@ -1649,6 +1649,79 @@ public final class Math {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the floating-point value adjacent to {@code d} in
|
||||||
|
* the direction of negative infinity. This method is
|
||||||
|
* semantically equivalent to {@code nextAfter(d,
|
||||||
|
* Double.NEGATIVE_INFINITY)}; however, a
|
||||||
|
* {@code nextDown} implementation may run faster than its
|
||||||
|
* equivalent {@code nextAfter} call.
|
||||||
|
*
|
||||||
|
* <p>Special Cases:
|
||||||
|
* <ul>
|
||||||
|
* <li> If the argument is NaN, the result is NaN.
|
||||||
|
*
|
||||||
|
* <li> If the argument is negative infinity, the result is
|
||||||
|
* negative infinity.
|
||||||
|
*
|
||||||
|
* <li> If the argument is zero, the result is
|
||||||
|
* {@code -Double.MIN_VALUE}
|
||||||
|
*
|
||||||
|
* </ul>
|
||||||
|
*
|
||||||
|
* @param d starting floating-point value
|
||||||
|
* @return The adjacent floating-point value closer to negative
|
||||||
|
* infinity.
|
||||||
|
* @since 1.8
|
||||||
|
*/
|
||||||
|
public static double nextDown(double d) {
|
||||||
|
if (Double.isNaN(d) || d == Double.NEGATIVE_INFINITY)
|
||||||
|
return d;
|
||||||
|
else {
|
||||||
|
if (d == 0.0)
|
||||||
|
return -Double.MIN_VALUE;
|
||||||
|
else
|
||||||
|
return Double.longBitsToDouble(Double.doubleToRawLongBits(d) +
|
||||||
|
((d > 0.0d)?-1L:+1L));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the floating-point value adjacent to {@code f} in
|
||||||
|
* the direction of negative infinity. This method is
|
||||||
|
* semantically equivalent to {@code nextAfter(f,
|
||||||
|
* Float.NEGATIVE_INFINITY)}; however, a
|
||||||
|
* {@code nextDown} implementation may run faster than its
|
||||||
|
* equivalent {@code nextAfter} call.
|
||||||
|
*
|
||||||
|
* <p>Special Cases:
|
||||||
|
* <ul>
|
||||||
|
* <li> If the argument is NaN, the result is NaN.
|
||||||
|
*
|
||||||
|
* <li> If the argument is negative infinity, the result is
|
||||||
|
* negative infinity.
|
||||||
|
*
|
||||||
|
* <li> If the argument is zero, the result is
|
||||||
|
* {@code -Float.MIN_VALUE}
|
||||||
|
*
|
||||||
|
* </ul>
|
||||||
|
*
|
||||||
|
* @param f starting floating-point value
|
||||||
|
* @return The adjacent floating-point value closer to negative
|
||||||
|
* infinity.
|
||||||
|
* @since 1.8
|
||||||
|
*/
|
||||||
|
public static float nextDown(float f) {
|
||||||
|
if (Float.isNaN(f) || f == Float.NEGATIVE_INFINITY)
|
||||||
|
return f;
|
||||||
|
else {
|
||||||
|
if (f == 0.0f)
|
||||||
|
return -Float.MIN_VALUE;
|
||||||
|
else
|
||||||
|
return Float.intBitsToFloat(Float.floatToRawIntBits(f) +
|
||||||
|
((f > 0.0f)?-1:+1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return {@code d} ×
|
* Return {@code d} ×
|
||||||
|
@ -1396,6 +1396,64 @@ public final class StrictMath {
|
|||||||
return Math.nextUp(f);
|
return Math.nextUp(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the floating-point value adjacent to {@code d} in
|
||||||
|
* the direction of negative infinity. This method is
|
||||||
|
* semantically equivalent to {@code nextAfter(d,
|
||||||
|
* Double.NEGATIVE_INFINITY)}; however, a
|
||||||
|
* {@code nextDown} implementation may run faster than its
|
||||||
|
* equivalent {@code nextAfter} call.
|
||||||
|
*
|
||||||
|
* <p>Special Cases:
|
||||||
|
* <ul>
|
||||||
|
* <li> If the argument is NaN, the result is NaN.
|
||||||
|
*
|
||||||
|
* <li> If the argument is negative infinity, the result is
|
||||||
|
* negative infinity.
|
||||||
|
*
|
||||||
|
* <li> If the argument is zero, the result is
|
||||||
|
* {@code -Double.MIN_VALUE}
|
||||||
|
*
|
||||||
|
* </ul>
|
||||||
|
*
|
||||||
|
* @param d starting floating-point value
|
||||||
|
* @return The adjacent floating-point value closer to negative
|
||||||
|
* infinity.
|
||||||
|
* @since 1.8
|
||||||
|
*/
|
||||||
|
public static double nextDown(double d) {
|
||||||
|
return Math.nextDown(d);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the floating-point value adjacent to {@code f} in
|
||||||
|
* the direction of negative infinity. This method is
|
||||||
|
* semantically equivalent to {@code nextAfter(f,
|
||||||
|
* Float.NEGATIVE_INFINITY)}; however, a
|
||||||
|
* {@code nextDown} implementation may run faster than its
|
||||||
|
* equivalent {@code nextAfter} call.
|
||||||
|
*
|
||||||
|
* <p>Special Cases:
|
||||||
|
* <ul>
|
||||||
|
* <li> If the argument is NaN, the result is NaN.
|
||||||
|
*
|
||||||
|
* <li> If the argument is negative infinity, the result is
|
||||||
|
* negative infinity.
|
||||||
|
*
|
||||||
|
* <li> If the argument is zero, the result is
|
||||||
|
* {@code -Float.MIN_VALUE}
|
||||||
|
*
|
||||||
|
* </ul>
|
||||||
|
*
|
||||||
|
* @param f starting floating-point value
|
||||||
|
* @return The adjacent floating-point value closer to negative
|
||||||
|
* infinity.
|
||||||
|
* @since 1.8
|
||||||
|
*/
|
||||||
|
public static float nextDown(float f) {
|
||||||
|
return Math.nextDown(f);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return {@code d} ×
|
* Return {@code d} ×
|
||||||
* 2<sup>{@code scaleFactor}</sup> rounded as if performed
|
* 2<sup>{@code scaleFactor}</sup> rounded as if performed
|
||||||
|
@ -50,7 +50,6 @@ import java.text.NumberFormat;
|
|||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import sun.misc.FpUtils;
|
|
||||||
import sun.misc.DoubleConsts;
|
import sun.misc.DoubleConsts;
|
||||||
import sun.misc.FormattedFloatingDecimal;
|
import sun.misc.FormattedFloatingDecimal;
|
||||||
|
|
||||||
@ -3417,7 +3416,7 @@ public final class Formatter implements Closeable, Flushable {
|
|||||||
// Method assumes that d > 0.
|
// Method assumes that d > 0.
|
||||||
private String hexDouble(double d, int prec) {
|
private String hexDouble(double d, int prec) {
|
||||||
// Let Double.toHexString handle simple cases
|
// Let Double.toHexString handle simple cases
|
||||||
if(!FpUtils.isFinite(d) || d == 0.0 || prec == 0 || prec >= 13)
|
if(!Double.isFinite(d) || d == 0.0 || prec == 0 || prec >= 13)
|
||||||
// remove "0x"
|
// remove "0x"
|
||||||
return Double.toHexString(d).substring(2);
|
return Double.toHexString(d).substring(2);
|
||||||
else {
|
else {
|
||||||
|
@ -202,9 +202,11 @@ public class FpUtils {
|
|||||||
* @param d the {@code double} value to be tested
|
* @param d the {@code double} value to be tested
|
||||||
* @return {@code true} if the argument is a finite
|
* @return {@code true} if the argument is a finite
|
||||||
* floating-point value, {@code false} otherwise.
|
* floating-point value, {@code false} otherwise.
|
||||||
|
* @deprecated Use Double.isFinite.
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
public static boolean isFinite(double d) {
|
public static boolean isFinite(double d) {
|
||||||
return Math.abs(d) <= DoubleConsts.MAX_VALUE;
|
return Double.isFinite(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -215,9 +217,11 @@ public class FpUtils {
|
|||||||
* @param f the {@code float} value to be tested
|
* @param f the {@code float} value to be tested
|
||||||
* @return {@code true} if the argument is a finite
|
* @return {@code true} if the argument is a finite
|
||||||
* floating-point value, {@code false} otherwise.
|
* floating-point value, {@code false} otherwise.
|
||||||
|
* @deprecated Use Float.isFinite.
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
public static boolean isFinite(float f) {
|
public static boolean isFinite(float f) {
|
||||||
return Math.abs(f) <= FloatConsts.MAX_VALUE;
|
return Float.isFinite(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -746,17 +750,11 @@ public class FpUtils {
|
|||||||
* @return The adjacent floating-point value closer to negative
|
* @return The adjacent floating-point value closer to negative
|
||||||
* infinity.
|
* infinity.
|
||||||
* @author Joseph D. Darcy
|
* @author Joseph D. Darcy
|
||||||
|
* @deprecated Use Math.nextDown.
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
public static double nextDown(double d) {
|
public static double nextDown(double d) {
|
||||||
if( isNaN(d) || d == Double.NEGATIVE_INFINITY)
|
return Math.nextDown(d);
|
||||||
return d;
|
|
||||||
else {
|
|
||||||
if (d == 0.0)
|
|
||||||
return -Double.MIN_VALUE;
|
|
||||||
else
|
|
||||||
return Double.longBitsToDouble(Double.doubleToRawLongBits(d) +
|
|
||||||
((d > 0.0d)?-1L:+1L));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -783,17 +781,11 @@ public class FpUtils {
|
|||||||
* @return The adjacent floating-point value closer to negative
|
* @return The adjacent floating-point value closer to negative
|
||||||
* infinity.
|
* infinity.
|
||||||
* @author Joseph D. Darcy
|
* @author Joseph D. Darcy
|
||||||
|
* @deprecated Use Math.nextDown.
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
public static double nextDown(float f) {
|
public static double nextDown(float f) {
|
||||||
if( isNaN(f) || f == Float.NEGATIVE_INFINITY)
|
return Math.nextDown(f);
|
||||||
return f;
|
|
||||||
else {
|
|
||||||
if (f == 0.0f)
|
|
||||||
return -Float.MIN_VALUE;
|
|
||||||
else
|
|
||||||
return Float.intBitsToFloat(Float.floatToRawIntBits(f) +
|
|
||||||
((f > 0.0f)?-1:+1));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -30,7 +30,6 @@
|
|||||||
|
|
||||||
|
|
||||||
import java.util.regex.*;
|
import java.util.regex.*;
|
||||||
import sun.misc.FpUtils;
|
|
||||||
import sun.misc.DoubleConsts;
|
import sun.misc.DoubleConsts;
|
||||||
|
|
||||||
public class ParseHexFloatingPoint {
|
public class ParseHexFloatingPoint {
|
||||||
@ -227,7 +226,7 @@ public class ParseHexFloatingPoint {
|
|||||||
new PairSD("0x1.000000000000001p-1075", Double.MIN_VALUE),
|
new PairSD("0x1.000000000000001p-1075", Double.MIN_VALUE),
|
||||||
|
|
||||||
// More subnormal rounding tests
|
// More subnormal rounding tests
|
||||||
new PairSD("0x0.fffffffffffff7fffffp-1022", FpUtils.nextDown(DoubleConsts.MIN_NORMAL)),
|
new PairSD("0x0.fffffffffffff7fffffp-1022", Math.nextDown(DoubleConsts.MIN_NORMAL)),
|
||||||
new PairSD("0x0.fffffffffffff8p-1022", DoubleConsts.MIN_NORMAL),
|
new PairSD("0x0.fffffffffffff8p-1022", DoubleConsts.MIN_NORMAL),
|
||||||
new PairSD("0x0.fffffffffffff800000001p-1022",DoubleConsts.MIN_NORMAL),
|
new PairSD("0x0.fffffffffffff800000001p-1022",DoubleConsts.MIN_NORMAL),
|
||||||
new PairSD("0x0.fffffffffffff80000000000000001p-1022",DoubleConsts.MIN_NORMAL),
|
new PairSD("0x0.fffffffffffff80000000000000001p-1022",DoubleConsts.MIN_NORMAL),
|
||||||
@ -242,10 +241,10 @@ public class ParseHexFloatingPoint {
|
|||||||
new PairSD("0x1.fffffffffffff8p1023", infinityD),
|
new PairSD("0x1.fffffffffffff8p1023", infinityD),
|
||||||
new PairSD("0x1.fffffffffffff8000001p1023", infinityD),
|
new PairSD("0x1.fffffffffffff8000001p1023", infinityD),
|
||||||
|
|
||||||
new PairSD("0x1.ffffffffffffep1023", FpUtils.nextDown(Double.MAX_VALUE)),
|
new PairSD("0x1.ffffffffffffep1023", Math.nextDown(Double.MAX_VALUE)),
|
||||||
new PairSD("0x1.ffffffffffffe0000p1023", FpUtils.nextDown(Double.MAX_VALUE)),
|
new PairSD("0x1.ffffffffffffe0000p1023", Math.nextDown(Double.MAX_VALUE)),
|
||||||
new PairSD("0x1.ffffffffffffe8p1023", FpUtils.nextDown(Double.MAX_VALUE)),
|
new PairSD("0x1.ffffffffffffe8p1023", Math.nextDown(Double.MAX_VALUE)),
|
||||||
new PairSD("0x1.ffffffffffffe7p1023", FpUtils.nextDown(Double.MAX_VALUE)),
|
new PairSD("0x1.ffffffffffffe7p1023", Math.nextDown(Double.MAX_VALUE)),
|
||||||
new PairSD("0x1.ffffffffffffeffffffp1023", Double.MAX_VALUE),
|
new PairSD("0x1.ffffffffffffeffffffp1023", Double.MAX_VALUE),
|
||||||
new PairSD("0x1.ffffffffffffe8000001p1023", Double.MAX_VALUE),
|
new PairSD("0x1.ffffffffffffe8000001p1023", Double.MAX_VALUE),
|
||||||
};
|
};
|
||||||
@ -284,8 +283,8 @@ public class ParseHexFloatingPoint {
|
|||||||
};
|
};
|
||||||
|
|
||||||
double [] answers = {
|
double [] answers = {
|
||||||
FpUtils.nextDown(FpUtils.nextDown(2.0)),
|
Math.nextDown(Math.nextDown(2.0)),
|
||||||
FpUtils.nextDown(2.0),
|
Math.nextDown(2.0),
|
||||||
2.0
|
2.0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -27,7 +27,6 @@
|
|||||||
* @summary Check for correct implementation of Math.ceil and Math.floor
|
* @summary Check for correct implementation of Math.ceil and Math.floor
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import sun.misc.FpUtils;
|
|
||||||
import sun.misc.DoubleConsts;
|
import sun.misc.DoubleConsts;
|
||||||
|
|
||||||
public class CeilAndFloorTests {
|
public class CeilAndFloorTests {
|
||||||
@ -69,7 +68,7 @@ public class CeilAndFloorTests {
|
|||||||
|
|
||||||
for(int i = Double.MIN_EXPONENT; i <= Double.MAX_EXPONENT; i++) {
|
for(int i = Double.MIN_EXPONENT; i <= Double.MAX_EXPONENT; i++) {
|
||||||
double powerOfTwo = Math.scalb(1.0, i);
|
double powerOfTwo = Math.scalb(1.0, i);
|
||||||
double neighborDown = FpUtils.nextDown(powerOfTwo);
|
double neighborDown = Math.nextDown(powerOfTwo);
|
||||||
double neighborUp = Math.nextUp(powerOfTwo);
|
double neighborUp = Math.nextUp(powerOfTwo);
|
||||||
|
|
||||||
if (i < 0) {
|
if (i < 0) {
|
||||||
@ -114,7 +113,7 @@ public class CeilAndFloorTests {
|
|||||||
|
|
||||||
for(int i = -(0x10000); i <= 0x10000; i++) {
|
for(int i = -(0x10000); i <= 0x10000; i++) {
|
||||||
double d = (double) i;
|
double d = (double) i;
|
||||||
double neighborDown = FpUtils.nextDown(d);
|
double neighborDown = Math.nextDown(d);
|
||||||
double neighborUp = Math.nextUp(d);
|
double neighborUp = Math.nextUp(d);
|
||||||
|
|
||||||
failures += testCeilCase( d, d);
|
failures += testCeilCase( d, d);
|
||||||
@ -140,8 +139,8 @@ public class CeilAndFloorTests {
|
|||||||
double [][] testCases = {
|
double [][] testCases = {
|
||||||
{ Double.MIN_VALUE, 1.0},
|
{ Double.MIN_VALUE, 1.0},
|
||||||
{-Double.MIN_VALUE, -0.0},
|
{-Double.MIN_VALUE, -0.0},
|
||||||
{ FpUtils.nextDown(DoubleConsts.MIN_NORMAL), 1.0},
|
{ Math.nextDown(DoubleConsts.MIN_NORMAL), 1.0},
|
||||||
{-FpUtils.nextDown(DoubleConsts.MIN_NORMAL), -0.0},
|
{-Math.nextDown(DoubleConsts.MIN_NORMAL), -0.0},
|
||||||
{ DoubleConsts.MIN_NORMAL, 1.0},
|
{ DoubleConsts.MIN_NORMAL, 1.0},
|
||||||
{-DoubleConsts.MIN_NORMAL, -0.0},
|
{-DoubleConsts.MIN_NORMAL, -0.0},
|
||||||
|
|
||||||
@ -157,8 +156,8 @@ public class CeilAndFloorTests {
|
|||||||
{ 2.5, 3.0},
|
{ 2.5, 3.0},
|
||||||
{-2.5, -2.0},
|
{-2.5, -2.0},
|
||||||
|
|
||||||
{ FpUtils.nextDown(1.0), 1.0},
|
{ Math.nextDown(1.0), 1.0},
|
||||||
{ FpUtils.nextDown(-1.0), -1.0},
|
{ Math.nextDown(-1.0), -1.0},
|
||||||
|
|
||||||
{ Math.nextUp(1.0), 2.0},
|
{ Math.nextUp(1.0), 2.0},
|
||||||
{ Math.nextUp(-1.0), -0.0},
|
{ Math.nextUp(-1.0), -0.0},
|
||||||
@ -166,17 +165,17 @@ public class CeilAndFloorTests {
|
|||||||
{ 0x1.0p51, 0x1.0p51},
|
{ 0x1.0p51, 0x1.0p51},
|
||||||
{-0x1.0p51, -0x1.0p51},
|
{-0x1.0p51, -0x1.0p51},
|
||||||
|
|
||||||
{ FpUtils.nextDown(0x1.0p51), 0x1.0p51},
|
{ Math.nextDown(0x1.0p51), 0x1.0p51},
|
||||||
{-Math.nextUp(0x1.0p51), -0x1.0p51},
|
{-Math.nextUp(0x1.0p51), -0x1.0p51},
|
||||||
|
|
||||||
{ Math.nextUp(0x1.0p51), 0x1.0p51+1},
|
{ Math.nextUp(0x1.0p51), 0x1.0p51+1},
|
||||||
{-FpUtils.nextDown(0x1.0p51), -0x1.0p51+1},
|
{-Math.nextDown(0x1.0p51), -0x1.0p51+1},
|
||||||
|
|
||||||
{ FpUtils.nextDown(0x1.0p52), 0x1.0p52},
|
{ Math.nextDown(0x1.0p52), 0x1.0p52},
|
||||||
{-Math.nextUp(0x1.0p52), -0x1.0p52-1.0},
|
{-Math.nextUp(0x1.0p52), -0x1.0p52-1.0},
|
||||||
|
|
||||||
{ Math.nextUp(0x1.0p52), 0x1.0p52+1.0},
|
{ Math.nextUp(0x1.0p52), 0x1.0p52+1.0},
|
||||||
{-FpUtils.nextDown(0x1.0p52), -0x1.0p52+1.0},
|
{-Math.nextDown(0x1.0p52), -0x1.0p52+1.0},
|
||||||
};
|
};
|
||||||
|
|
||||||
for(double[] testCase : testCases) {
|
for(double[] testCase : testCases) {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2011 Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -28,7 +28,6 @@
|
|||||||
* @author Joseph D. Darcy
|
* @author Joseph D. Darcy
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import sun.misc.FpUtils;
|
|
||||||
import sun.misc.DoubleConsts;
|
import sun.misc.DoubleConsts;
|
||||||
|
|
||||||
public class CubeRootTests {
|
public class CubeRootTests {
|
||||||
@ -245,8 +244,8 @@ public class CubeRootTests {
|
|||||||
double pc = Math.scalb(1.0, 3*i);
|
double pc = Math.scalb(1.0, 3*i);
|
||||||
|
|
||||||
pcNeighbors[2] = pc;
|
pcNeighbors[2] = pc;
|
||||||
pcNeighbors[1] = FpUtils.nextDown(pc);
|
pcNeighbors[1] = Math.nextDown(pc);
|
||||||
pcNeighbors[0] = FpUtils.nextDown(pcNeighbors[1]);
|
pcNeighbors[0] = Math.nextDown(pcNeighbors[1]);
|
||||||
pcNeighbors[3] = Math.nextUp(pc);
|
pcNeighbors[3] = Math.nextUp(pc);
|
||||||
pcNeighbors[4] = Math.nextUp(pcNeighbors[3]);
|
pcNeighbors[4] = Math.nextUp(pcNeighbors[3]);
|
||||||
|
|
||||||
@ -284,8 +283,8 @@ public class CubeRootTests {
|
|||||||
double pc = Math.scalb(1.0, 3*i);
|
double pc = Math.scalb(1.0, 3*i);
|
||||||
|
|
||||||
pcNeighbors[2] = pc;
|
pcNeighbors[2] = pc;
|
||||||
pcNeighbors[1] = FpUtils.nextDown(pc);
|
pcNeighbors[1] = Math.nextDown(pc);
|
||||||
pcNeighbors[0] = FpUtils.nextDown(pcNeighbors[1]);
|
pcNeighbors[0] = Math.nextDown(pcNeighbors[1]);
|
||||||
pcNeighbors[3] = Math.nextUp(pc);
|
pcNeighbors[3] = Math.nextUp(pc);
|
||||||
pcNeighbors[4] = Math.nextUp(pcNeighbors[3]);
|
pcNeighbors[4] = Math.nextUp(pcNeighbors[3]);
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2011 Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -29,7 +29,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import sun.misc.DoubleConsts;
|
import sun.misc.DoubleConsts;
|
||||||
import sun.misc.FpUtils;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The Taylor expansion of expxm1(x) = exp(x) -1 is
|
* The Taylor expansion of expxm1(x) = exp(x) -1 is
|
||||||
@ -143,8 +142,8 @@ public class Expm1Tests {
|
|||||||
double pc = StrictMath.log(2)*i;
|
double pc = StrictMath.log(2)*i;
|
||||||
|
|
||||||
pcNeighbors[2] = pc;
|
pcNeighbors[2] = pc;
|
||||||
pcNeighbors[1] = FpUtils.nextDown(pc);
|
pcNeighbors[1] = Math.nextDown(pc);
|
||||||
pcNeighbors[0] = FpUtils.nextDown(pcNeighbors[1]);
|
pcNeighbors[0] = Math.nextDown(pcNeighbors[1]);
|
||||||
pcNeighbors[3] = Math.nextUp(pc);
|
pcNeighbors[3] = Math.nextUp(pc);
|
||||||
pcNeighbors[4] = Math.nextUp(pcNeighbors[3]);
|
pcNeighbors[4] = Math.nextUp(pcNeighbors[3]);
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2011 Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -29,7 +29,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import sun.misc.DoubleConsts;
|
import sun.misc.DoubleConsts;
|
||||||
import sun.misc.FpUtils;
|
|
||||||
|
|
||||||
public class HyperbolicTests {
|
public class HyperbolicTests {
|
||||||
private HyperbolicTests(){}
|
private HyperbolicTests(){}
|
||||||
@ -280,7 +279,7 @@ public class HyperbolicTests {
|
|||||||
long trans22 = Double.doubleToLongBits(22.0);
|
long trans22 = Double.doubleToLongBits(22.0);
|
||||||
// (approximately) largest value such that exp shouldn't
|
// (approximately) largest value such that exp shouldn't
|
||||||
// overflow
|
// overflow
|
||||||
long transExpOvfl = Double.doubleToLongBits(FpUtils.nextDown(709.7827128933841));
|
long transExpOvfl = Double.doubleToLongBits(Math.nextDown(709.7827128933841));
|
||||||
|
|
||||||
for(long i = trans22;
|
for(long i = trans22;
|
||||||
i < transExpOvfl;
|
i < transExpOvfl;
|
||||||
@ -639,7 +638,7 @@ public class HyperbolicTests {
|
|||||||
long trans22 = Double.doubleToLongBits(22.0);
|
long trans22 = Double.doubleToLongBits(22.0);
|
||||||
// (approximately) largest value such that exp shouldn't
|
// (approximately) largest value such that exp shouldn't
|
||||||
// overflow
|
// overflow
|
||||||
long transExpOvfl = Double.doubleToLongBits(FpUtils.nextDown(709.7827128933841));
|
long transExpOvfl = Double.doubleToLongBits(Math.nextDown(709.7827128933841));
|
||||||
|
|
||||||
for(long i = trans22;
|
for(long i = trans22;
|
||||||
i < transExpOvfl;
|
i < transExpOvfl;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -156,8 +156,8 @@ public class HypotTests {
|
|||||||
double pc = Math.scalb(1.0, i);
|
double pc = Math.scalb(1.0, i);
|
||||||
|
|
||||||
pcNeighbors[2] = pc;
|
pcNeighbors[2] = pc;
|
||||||
pcNeighbors[1] = FpUtils.nextDown(pc);
|
pcNeighbors[1] = Math.nextDown(pc);
|
||||||
pcNeighbors[0] = FpUtils.nextDown(pcNeighbors[1]);
|
pcNeighbors[0] = Math.nextDown(pcNeighbors[1]);
|
||||||
pcNeighbors[3] = Math.nextUp(pc);
|
pcNeighbors[3] = Math.nextUp(pc);
|
||||||
pcNeighbors[4] = Math.nextUp(pcNeighbors[3]);
|
pcNeighbors[4] = Math.nextUp(pcNeighbors[3]);
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -623,8 +623,11 @@ public class IeeeRecommendedTests {
|
|||||||
};
|
};
|
||||||
|
|
||||||
for(int i = 0; i < testCases.length; i++) {
|
for(int i = 0; i < testCases.length; i++) {
|
||||||
failures+=Tests.test("FpUtils.nextDown(float)",
|
failures+=Tests.test("Math.nextDown(float)",
|
||||||
testCases[i][0], FpUtils.nextDown(testCases[i][0]), testCases[i][1]);
|
testCases[i][0], Math.nextDown(testCases[i][0]), testCases[i][1]);
|
||||||
|
|
||||||
|
failures+=Tests.test("StrictMath.nextDown(float)",
|
||||||
|
testCases[i][0], StrictMath.nextDown(testCases[i][0]), testCases[i][1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return failures;
|
return failures;
|
||||||
@ -659,8 +662,11 @@ public class IeeeRecommendedTests {
|
|||||||
};
|
};
|
||||||
|
|
||||||
for(int i = 0; i < testCases.length; i++) {
|
for(int i = 0; i < testCases.length; i++) {
|
||||||
failures+=Tests.test("FpUtils.nextDown(double)",
|
failures+=Tests.test("Math.nextDown(double)",
|
||||||
testCases[i][0], FpUtils.nextDown(testCases[i][0]), testCases[i][1]);
|
testCases[i][0], Math.nextDown(testCases[i][0]), testCases[i][1]);
|
||||||
|
|
||||||
|
failures+=Tests.test("StrictMath.nextDown(double)",
|
||||||
|
testCases[i][0], StrictMath.nextDown(testCases[i][0]), testCases[i][1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return failures;
|
return failures;
|
||||||
@ -706,8 +712,8 @@ public class IeeeRecommendedTests {
|
|||||||
FpUtils.isNaN(testCases[i]), (i ==0));
|
FpUtils.isNaN(testCases[i]), (i ==0));
|
||||||
|
|
||||||
// isFinite
|
// isFinite
|
||||||
failures+=Tests.test("FpUtils.isFinite(float)", testCases[i],
|
failures+=Tests.test("Float.isFinite(float)", testCases[i],
|
||||||
FpUtils.isFinite(testCases[i]), (i >= 3));
|
Float.isFinite(testCases[i]), (i >= 3));
|
||||||
|
|
||||||
// isInfinite
|
// isInfinite
|
||||||
failures+=Tests.test("FpUtils.isInfinite(float)", testCases[i],
|
failures+=Tests.test("FpUtils.isInfinite(float)", testCases[i],
|
||||||
@ -756,8 +762,8 @@ public class IeeeRecommendedTests {
|
|||||||
FpUtils.isNaN(testCases[i]), (i ==0));
|
FpUtils.isNaN(testCases[i]), (i ==0));
|
||||||
|
|
||||||
// isFinite
|
// isFinite
|
||||||
failures+=Tests.test("FpUtils.isFinite(double)", testCases[i],
|
failures+=Tests.test("Double.isFinite(double)", testCases[i],
|
||||||
FpUtils.isFinite(testCases[i]), (i >= 3));
|
Double.isFinite(testCases[i]), (i >= 3));
|
||||||
|
|
||||||
// isInfinite
|
// isInfinite
|
||||||
failures+=Tests.test("FpUtils.isInfinite(double)", testCases[i],
|
failures+=Tests.test("FpUtils.isInfinite(double)", testCases[i],
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2011 Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -28,7 +28,6 @@
|
|||||||
* @author Joseph D. Darcy
|
* @author Joseph D. Darcy
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import sun.misc.FpUtils;
|
|
||||||
import sun.misc.DoubleConsts;
|
import sun.misc.DoubleConsts;
|
||||||
|
|
||||||
public class Log10Tests {
|
public class Log10Tests {
|
||||||
@ -98,13 +97,13 @@ public class Log10Tests {
|
|||||||
// within a few ulps of log(x)/log(10)
|
// within a few ulps of log(x)/log(10)
|
||||||
for(int i = 0; i < 10000; i++) {
|
for(int i = 0; i < 10000; i++) {
|
||||||
double input = Double.longBitsToDouble(rand.nextLong());
|
double input = Double.longBitsToDouble(rand.nextLong());
|
||||||
if(! FpUtils.isFinite(input))
|
if(! Double.isFinite(input))
|
||||||
continue; // avoid testing NaN and infinite values
|
continue; // avoid testing NaN and infinite values
|
||||||
else {
|
else {
|
||||||
input = Math.abs(input);
|
input = Math.abs(input);
|
||||||
|
|
||||||
double expected = StrictMath.log(input)/LN_10;
|
double expected = StrictMath.log(input)/LN_10;
|
||||||
if( ! FpUtils.isFinite(expected))
|
if( ! Double.isFinite(expected))
|
||||||
continue; // if log(input) overflowed, try again
|
continue; // if log(input) overflowed, try again
|
||||||
else {
|
else {
|
||||||
double result;
|
double result;
|
||||||
@ -154,15 +153,15 @@ public class Log10Tests {
|
|||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
input[half] = 1.0;
|
input[half] = 1.0;
|
||||||
up = Math.nextUp(1.0);
|
up = Math.nextUp(1.0);
|
||||||
down = FpUtils.nextDown(1.0);
|
down = Math.nextDown(1.0);
|
||||||
} else {
|
} else {
|
||||||
input[half + i] = up;
|
input[half + i] = up;
|
||||||
input[half - i] = down;
|
input[half - i] = down;
|
||||||
up = Math.nextUp(up);
|
up = Math.nextUp(up);
|
||||||
down = FpUtils.nextDown(down);
|
down = Math.nextDown(down);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
input[0] = FpUtils.nextDown(input[1]);
|
input[0] = Math.nextDown(input[1]);
|
||||||
|
|
||||||
for(int i = 0; i < neighbors.length; i++) {
|
for(int i = 0; i < neighbors.length; i++) {
|
||||||
neighbors[i] = Math.log10(input[i]);
|
neighbors[i] = Math.log10(input[i]);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2011 Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -135,8 +135,8 @@ public class Log1pTests {
|
|||||||
double pc = StrictMath.pow(Math.E, i) - 1;
|
double pc = StrictMath.pow(Math.E, i) - 1;
|
||||||
|
|
||||||
pcNeighbors[2] = pc;
|
pcNeighbors[2] = pc;
|
||||||
pcNeighbors[1] = FpUtils.nextDown(pc);
|
pcNeighbors[1] = Math.nextDown(pc);
|
||||||
pcNeighbors[0] = FpUtils.nextDown(pcNeighbors[1]);
|
pcNeighbors[0] = Math.nextDown(pcNeighbors[1]);
|
||||||
pcNeighbors[3] = Math.nextUp(pc);
|
pcNeighbors[3] = Math.nextUp(pc);
|
||||||
pcNeighbors[4] = Math.nextUp(pcNeighbors[3]);
|
pcNeighbors[4] = Math.nextUp(pcNeighbors[3]);
|
||||||
|
|
||||||
@ -202,5 +202,4 @@ public class Log1pTests {
|
|||||||
throw new RuntimeException();
|
throw new RuntimeException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1998, 2003, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -25,10 +25,8 @@
|
|||||||
* @test
|
* @test
|
||||||
* @bug 4101566 4831589
|
* @bug 4101566 4831589
|
||||||
* @summary Check for correct implementation of Math.rint(double)
|
* @summary Check for correct implementation of Math.rint(double)
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import sun.misc.FpUtils;
|
|
||||||
import sun.misc.DoubleConsts;
|
import sun.misc.DoubleConsts;
|
||||||
|
|
||||||
public class Rint {
|
public class Rint {
|
||||||
@ -53,22 +51,22 @@ public class Rint {
|
|||||||
double [][] testCases = {
|
double [][] testCases = {
|
||||||
{0.0, 0.0},
|
{0.0, 0.0},
|
||||||
{Double.MIN_VALUE, 0.0},
|
{Double.MIN_VALUE, 0.0},
|
||||||
{FpUtils.nextDown(DoubleConsts.MIN_NORMAL), 0.0},
|
{Math.nextDown(DoubleConsts.MIN_NORMAL), 0.0},
|
||||||
{DoubleConsts.MIN_NORMAL, 0.0},
|
{DoubleConsts.MIN_NORMAL, 0.0},
|
||||||
|
|
||||||
{0.2, 0.0},
|
{0.2, 0.0},
|
||||||
|
|
||||||
{FpUtils.nextDown(0.5), 0.0},
|
{Math.nextDown(0.5), 0.0},
|
||||||
{ 0.5, 0.0},
|
{ 0.5, 0.0},
|
||||||
{ Math.nextUp(0.5), 1.0},
|
{ Math.nextUp(0.5), 1.0},
|
||||||
|
|
||||||
{0.7, 1.0},
|
{0.7, 1.0},
|
||||||
{FpUtils.nextDown(1.0), 1.0},
|
{Math.nextDown(1.0), 1.0},
|
||||||
{ 1.0, 1.0},
|
{ 1.0, 1.0},
|
||||||
{ Math.nextUp(1.0), 1.0},
|
{ Math.nextUp(1.0), 1.0},
|
||||||
|
|
||||||
{FpUtils.nextDown(1.5), 1.0},
|
{Math.nextDown(1.5), 1.0},
|
||||||
{ 1.5, 2.0},
|
{ 1.5, 2.0},
|
||||||
{ Math.nextUp(1.5), 2.0},
|
{ Math.nextUp(1.5), 2.0},
|
||||||
|
|
||||||
{4.2, 4.0},
|
{4.2, 4.0},
|
||||||
@ -82,7 +80,7 @@ public class Rint {
|
|||||||
{150000.75, 150001.0},
|
{150000.75, 150001.0},
|
||||||
{300000.5, 300000.0},
|
{300000.5, 300000.0},
|
||||||
{Math.nextUp(300000.5), 300001.0},
|
{Math.nextUp(300000.5), 300001.0},
|
||||||
{FpUtils.nextDown(300000.75), 300001.0},
|
{Math.nextDown(300000.75), 300001.0},
|
||||||
{300000.75, 300001.0},
|
{300000.75, 300001.0},
|
||||||
{Math.nextUp(300000.75), 300001.0},
|
{Math.nextUp(300000.75), 300001.0},
|
||||||
{300000.99, 300001.0},
|
{300000.99, 300001.0},
|
||||||
@ -91,7 +89,7 @@ public class Rint {
|
|||||||
{524287.75, 524288.0}, //(2^19 -1) + 0.75
|
{524287.75, 524288.0}, //(2^19 -1) + 0.75
|
||||||
{524288.75, 524289.0},
|
{524288.75, 524289.0},
|
||||||
|
|
||||||
{FpUtils.nextDown(twoToThe52), twoToThe52},
|
{Math.nextDown(twoToThe52), twoToThe52},
|
||||||
{twoToThe52, twoToThe52},
|
{twoToThe52, twoToThe52},
|
||||||
{Math.nextUp(twoToThe52), Math.nextUp(twoToThe52)},
|
{Math.nextUp(twoToThe52), Math.nextUp(twoToThe52)},
|
||||||
|
|
||||||
@ -118,5 +116,4 @@ public class Rint {
|
|||||||
throw new RuntimeException();
|
throw new RuntimeException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -36,7 +36,6 @@ import java.math.BigInteger;
|
|||||||
import java.text.DateFormatSymbols;
|
import java.text.DateFormatSymbols;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
#if[double]
|
#if[double]
|
||||||
import sun.misc.FpUtils;
|
|
||||||
import sun.misc.DoubleConsts;
|
import sun.misc.DoubleConsts;
|
||||||
#end[double]
|
#end[double]
|
||||||
|
|
||||||
@ -1301,9 +1300,9 @@ public class Basic$Type$ extends Basic {
|
|||||||
test("%.11a", "0x1.00000000000p-1022", DoubleConsts.MIN_NORMAL);
|
test("%.11a", "0x1.00000000000p-1022", DoubleConsts.MIN_NORMAL);
|
||||||
test("%.1a", "0x1.0p-1022", DoubleConsts.MIN_NORMAL);
|
test("%.1a", "0x1.0p-1022", DoubleConsts.MIN_NORMAL);
|
||||||
test("%.11a", "0x1.00000000000p-1022",
|
test("%.11a", "0x1.00000000000p-1022",
|
||||||
FpUtils.nextDown(DoubleConsts.MIN_NORMAL));
|
Math.nextDown(DoubleConsts.MIN_NORMAL));
|
||||||
test("%.1a", "0x1.0p-1022",
|
test("%.1a", "0x1.0p-1022",
|
||||||
FpUtils.nextDown(DoubleConsts.MIN_NORMAL));
|
Math.nextDown(DoubleConsts.MIN_NORMAL));
|
||||||
test("%.11a", "0x1.ffffffffffep-1023",
|
test("%.11a", "0x1.ffffffffffep-1023",
|
||||||
Double.parseDouble("0x0.fffffffffffp-1022"));
|
Double.parseDouble("0x0.fffffffffffp-1022"));
|
||||||
test("%.1a", "0x1.0p-1022",
|
test("%.1a", "0x1.0p-1022",
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -39,7 +39,6 @@ import java.util.*;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import static java.util.Calendar.*;
|
import static java.util.Calendar.*;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -39,7 +39,6 @@ import java.util.*;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import static java.util.Calendar.*;
|
import static java.util.Calendar.*;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -39,7 +39,6 @@ import java.util.*;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import static java.util.Calendar.*;
|
import static java.util.Calendar.*;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -39,7 +39,6 @@ import java.util.*;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import static java.util.Calendar.*;
|
import static java.util.Calendar.*;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -39,7 +39,6 @@ import java.util.*;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import static java.util.Calendar.*;
|
import static java.util.Calendar.*;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -39,7 +39,6 @@ import java.util.*;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import static java.util.Calendar.*;
|
import static java.util.Calendar.*;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -39,7 +39,6 @@ import java.util.*;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import static java.util.Calendar.*;
|
import static java.util.Calendar.*;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -39,7 +39,6 @@ import java.util.*;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import static java.util.Calendar.*;
|
import static java.util.Calendar.*;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -39,7 +39,6 @@ import java.util.*;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import static java.util.Calendar.*;
|
import static java.util.Calendar.*;
|
||||||
|
|
||||||
import static java.util.SimpleTimeZone.*;
|
import static java.util.SimpleTimeZone.*;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -36,7 +36,6 @@ import java.math.BigInteger;
|
|||||||
import java.text.DateFormatSymbols;
|
import java.text.DateFormatSymbols;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import sun.misc.FpUtils;
|
|
||||||
import sun.misc.DoubleConsts;
|
import sun.misc.DoubleConsts;
|
||||||
|
|
||||||
|
|
||||||
@ -1301,9 +1300,9 @@ public class BasicDouble extends Basic {
|
|||||||
test("%.11a", "0x1.00000000000p-1022", DoubleConsts.MIN_NORMAL);
|
test("%.11a", "0x1.00000000000p-1022", DoubleConsts.MIN_NORMAL);
|
||||||
test("%.1a", "0x1.0p-1022", DoubleConsts.MIN_NORMAL);
|
test("%.1a", "0x1.0p-1022", DoubleConsts.MIN_NORMAL);
|
||||||
test("%.11a", "0x1.00000000000p-1022",
|
test("%.11a", "0x1.00000000000p-1022",
|
||||||
FpUtils.nextDown(DoubleConsts.MIN_NORMAL));
|
Math.nextDown(DoubleConsts.MIN_NORMAL));
|
||||||
test("%.1a", "0x1.0p-1022",
|
test("%.1a", "0x1.0p-1022",
|
||||||
FpUtils.nextDown(DoubleConsts.MIN_NORMAL));
|
Math.nextDown(DoubleConsts.MIN_NORMAL));
|
||||||
test("%.11a", "0x1.ffffffffffep-1023",
|
test("%.11a", "0x1.ffffffffffep-1023",
|
||||||
Double.parseDouble("0x0.fffffffffffp-1022"));
|
Double.parseDouble("0x0.fffffffffffp-1022"));
|
||||||
test("%.1a", "0x1.0p-1022",
|
test("%.1a", "0x1.0p-1022",
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -39,7 +39,6 @@ import java.util.*;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import static java.util.Calendar.*;
|
import static java.util.Calendar.*;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -39,7 +39,6 @@ import java.util.*;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import static java.util.Calendar.*;
|
import static java.util.Calendar.*;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -39,7 +39,6 @@ import java.util.*;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import static java.util.Calendar.*;
|
import static java.util.Calendar.*;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -39,7 +39,6 @@ import java.util.*;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import static java.util.Calendar.*;
|
import static java.util.Calendar.*;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -39,7 +39,6 @@ import java.util.*;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import static java.util.Calendar.*;
|
import static java.util.Calendar.*;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -39,7 +39,6 @@ import java.util.*;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import static java.util.Calendar.*;
|
import static java.util.Calendar.*;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -39,7 +39,6 @@ import java.util.*;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import static java.util.Calendar.*;
|
import static java.util.Calendar.*;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -39,7 +39,6 @@ import java.util.*;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import static java.util.Calendar.*;
|
import static java.util.Calendar.*;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -39,7 +39,6 @@ import java.util.*;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import static java.util.Calendar.*;
|
import static java.util.Calendar.*;
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user