## src/share/classes/java/lang/StrictMath.java

Print this page

 ``` 1 /* 2 * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any `````` 596 *
• If both arguments are integers, then the result is exactly equal 597 * to the mathematical result of raising the first argument to the power 598 * of the second argument if that result can in fact be represented 599 * exactly as a {@code double} value. 600 * 601 *

(In the foregoing descriptions, a floating-point value is 602 * considered to be an integer if and only if it is finite and a 603 * fixed point of the method {@link #ceil ceil} or, 604 * equivalently, a fixed point of the method {@link #floor 605 * floor}. A value is a fixed point of a one-argument 606 * method if and only if the result of applying the method to the 607 * value is equal to the value.) 608 * 609 * @param a base. 610 * @param b the exponent. 611 * @return the value {@code a}{@code b}. 612 */ 613 public static native double pow(double a, double b); 614 615 /** 616 * Returns the closest {@code int} to the argument. The 617 * result is rounded to an integer by adding 1/2, taking the 618 * floor of the result, and casting the result to type {@code int}. 619 * In other words, the result is equal to the value of the expression: 620 *

{@code (int)Math.floor(a + 0.5f)} 621 * 622 *

Special cases: 623 *

• If the argument is NaN, the result is 0. 624 *
• If the argument is negative infinity or any value less than or 625 * equal to the value of {@code Integer.MIN_VALUE}, the result is 626 * equal to the value of {@code Integer.MIN_VALUE}. 627 *
• If the argument is positive infinity or any value greater than or 628 * equal to the value of {@code Integer.MAX_VALUE}, the result is 629 * equal to the value of {@code Integer.MAX_VALUE}.
630 * 631 * @param a a floating-point value to be rounded to an integer. 632 * @return the value of the argument rounded to the nearest 633 * {@code int} value. 634 * @see java.lang.Integer#MAX_VALUE 635 * @see java.lang.Integer#MIN_VALUE 636 */ 637 public static int round(float a) { 638 return (int)floor(a + 0.5f); 639 } 640 641 /** 642 * Returns the closest {@code long} to the argument. The result 643 * is rounded to an integer by adding 1/2, taking the floor of the 644 * result, and casting the result to type {@code long}. In other 645 * words, the result is equal to the value of the expression: 646 *

{@code (long)Math.floor(a + 0.5d)} 647 * 648 *

Special cases: 649 *

• If the argument is NaN, the result is 0. 650 *
• If the argument is negative infinity or any value less than or 651 * equal to the value of {@code Long.MIN_VALUE}, the result is 652 * equal to the value of {@code Long.MIN_VALUE}. 653 *
• If the argument is positive infinity or any value greater than or 654 * equal to the value of {@code Long.MAX_VALUE}, the result is 655 * equal to the value of {@code Long.MAX_VALUE}.
656 * 657 * @param a a floating-point value to be rounded to a 658 * {@code long}. 659 * @return the value of the argument rounded to the nearest 660 * {@code long} value. 661 * @see java.lang.Long#MAX_VALUE 662 * @see java.lang.Long#MIN_VALUE 663 */ 664 public static long round(double a) { 665 return (long)floor(a + 0.5d); 666 } 667 668 private static Random randomNumberGenerator; 669 670 private static synchronized Random initRNG() { 671 Random rnd = randomNumberGenerator; 672 return (rnd == null) ? (randomNumberGenerator = new Random()) : rnd; 673 } 674 675 /** 676 * Returns a {@code double} value with a positive sign, greater 677 * than or equal to {@code 0.0} and less than {@code 1.0}. 678 * Returned values are chosen pseudorandomly with (approximately) 679 * uniform distribution from that range. 680 * 681 *

When this method is first called, it creates a single new 682 * pseudorandom-number generator, exactly as if by the expression 683 * 684 *

{@code new java.util.Random()}
685 * ``` ``` 1 /* 2 * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any `````` 596 *
• If both arguments are integers, then the result is exactly equal 597 * to the mathematical result of raising the first argument to the power 598 * of the second argument if that result can in fact be represented 599 * exactly as a {@code double} value. 600 * 601 *

(In the foregoing descriptions, a floating-point value is 602 * considered to be an integer if and only if it is finite and a 603 * fixed point of the method {@link #ceil ceil} or, 604 * equivalently, a fixed point of the method {@link #floor 605 * floor}. A value is a fixed point of a one-argument 606 * method if and only if the result of applying the method to the 607 * value is equal to the value.) 608 * 609 * @param a base. 610 * @param b the exponent. 611 * @return the value {@code a}{@code b}. 612 */ 613 public static native double pow(double a, double b); 614 615 /** 616 * Returns the closest {@code int} to the argument, with ties 617 * rounding up. 618 * 619 *

Special cases: 620 *

• If the argument is NaN, the result is 0. 621 *
• If the argument is negative infinity or any value less than or 622 * equal to the value of {@code Integer.MIN_VALUE}, the result is 623 * equal to the value of {@code Integer.MIN_VALUE}. 624 *
• If the argument is positive infinity or any value greater than or 625 * equal to the value of {@code Integer.MAX_VALUE}, the result is 626 * equal to the value of {@code Integer.MAX_VALUE}.
627 * 628 * @param a a floating-point value to be rounded to an integer. 629 * @return the value of the argument rounded to the nearest 630 * {@code int} value. 631 * @see java.lang.Integer#MAX_VALUE 632 * @see java.lang.Integer#MIN_VALUE 633 */ 634 public static int round(float a) { 635 return Math.round(a); 636 } 637 638 /** 639 * Returns the closest {@code long} to the argument, with ties 640 * rounding up. 641 * 642 *

Special cases: 643 *

• If the argument is NaN, the result is 0. 644 *
• If the argument is negative infinity or any value less than or 645 * equal to the value of {@code Long.MIN_VALUE}, the result is 646 * equal to the value of {@code Long.MIN_VALUE}. 647 *
• If the argument is positive infinity or any value greater than or 648 * equal to the value of {@code Long.MAX_VALUE}, the result is 649 * equal to the value of {@code Long.MAX_VALUE}.
650 * 651 * @param a a floating-point value to be rounded to a 652 * {@code long}. 653 * @return the value of the argument rounded to the nearest 654 * {@code long} value. 655 * @see java.lang.Long#MAX_VALUE 656 * @see java.lang.Long#MIN_VALUE 657 */ 658 public static long round(double a) { 659 return Math.round(a); 660 } 661 662 private static Random randomNumberGenerator; 663 664 private static synchronized Random initRNG() { 665 Random rnd = randomNumberGenerator; 666 return (rnd == null) ? (randomNumberGenerator = new Random()) : rnd; 667 } 668 669 /** 670 * Returns a {@code double} value with a positive sign, greater 671 * than or equal to {@code 0.0} and less than {@code 1.0}. 672 * Returned values are chosen pseudorandomly with (approximately) 673 * uniform distribution from that range. 674 * 675 *

When this method is first called, it creates a single new 676 * pseudorandom-number generator, exactly as if by the expression 677 * 678 *

{@code new java.util.Random()}
679 * ```