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 * <li>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.</ul>
600 *
601 * <p>(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}<sup>{@code b}</sup>.
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 * <p>{@code (int)Math.floor(a + 0.5f)}
621 *
622 * <p>Special cases:
623 * <ul><li>If the argument is NaN, the result is 0.
624 * <li>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 * <li>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}.</ul>
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 * <p>{@code (long)Math.floor(a + 0.5d)}
647 *
648 * <p>Special cases:
649 * <ul><li>If the argument is NaN, the result is 0.
650 * <li>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 * <li>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}.</ul>
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 * <p>When this method is first called, it creates a single new
682 * pseudorandom-number generator, exactly as if by the expression
683 *
684 * <blockquote>{@code new java.util.Random()}</blockquote>
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 * <li>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.</ul>
600 *
601 * <p>(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}<sup>{@code b}</sup>.
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 * <p>Special cases:
620 * <ul><li>If the argument is NaN, the result is 0.
621 * <li>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 * <li>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}.</ul>
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 * <p>Special cases:
643 * <ul><li>If the argument is NaN, the result is 0.
644 * <li>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 * <li>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}.</ul>
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 * <p>When this method is first called, it creates a single new
676 * pseudorandom-number generator, exactly as if by the expression
677 *
678 * <blockquote>{@code new java.util.Random()}</blockquote>
679 *
|