1 /* 2 * Copyright (c) 2015, 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 23 * questions. 24 */ 25 package sun.java2d.marlin; 26 27 import jdk.internal.math.DoubleConsts; 28 import jdk.internal.math.FloatConsts; 29 30 /** 31 * Faster Math ceil / floor routines derived from StrictMath 32 */ 33 public final class FloatMath implements MarlinConst { 34 35 // overflow / NaN handling enabled: 36 static final boolean CHECK_OVERFLOW = true; 37 static final boolean CHECK_NAN = true; 38 39 private FloatMath() { 40 // utility class 41 } 42 43 // faster inlined min/max functions in the branch prediction is high 44 static float max(final float a, final float b) { 45 // no NaN handling 46 return (a >= b) ? a : b; 47 } 192 } 193 194 /** 195 * Faster alternative to floor(float) optimized for the integer domain 196 * and supporting NaN and +/-Infinity. 197 * 198 * @param a a value. 199 * @return the largest (closest to positive infinity) floating-point value 200 * that less than or equal to the argument and is equal to a mathematical 201 * integer. 202 */ 203 public static int floor_int(final float a) { 204 final int intpart = (int) a; 205 206 if (a >= intpart 207 || (CHECK_OVERFLOW && intpart == Integer.MIN_VALUE) 208 || CHECK_NAN && Float.isNaN(a)) { 209 return intpart; 210 } 211 return intpart - 1; 212 } 213 214 /** 215 * Returns a floating-point power of two in the normal range. 216 */ 217 static double powerOfTwoD(int n) { 218 assert (n >= DoubleConsts.MIN_EXPONENT && n <= DoubleConsts.MAX_EXPONENT); 219 return Double.longBitsToDouble((((long) n + (long) DoubleConsts.EXP_BIAS) 220 << (DoubleConsts.SIGNIFICAND_WIDTH - 1)) 221 & DoubleConsts.EXP_BIT_MASK); 222 } 223 } | ```
1 /*
2 * Copyright (c) 2015, 2016, 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
23 * questions.
24 */
25 package sun.java2d.marlin;
26
27 import jdk.internal.math.FloatConsts;
28
29 /**
30 * Faster Math ceil / floor routines derived from StrictMath
31 */
32 public final class FloatMath implements MarlinConst {
33
34 // overflow / NaN handling enabled:
35 static final boolean CHECK_OVERFLOW = true;
36 static final boolean CHECK_NAN = true;
37
38 private FloatMath() {
39 // utility class
40 }
41
42 // faster inlined min/max functions in the branch prediction is high
43 static float max(final float a, final float b) {
44 // no NaN handling
45 return (a >= b) ? a : b;
46 }
``` 191 } 192 193 /** 194 * Faster alternative to floor(float) optimized for the integer domain 195 * and supporting NaN and +/-Infinity. 196 * 197 * @param a a value. 198 * @return the largest (closest to positive infinity) floating-point value 199 * that less than or equal to the argument and is equal to a mathematical 200 * integer. 201 */ 202 public static int floor_int(final float a) { 203 final int intpart = (int) a; 204 205 if (a >= intpart 206 || (CHECK_OVERFLOW && intpart == Integer.MIN_VALUE) 207 || CHECK_NAN && Float.isNaN(a)) { 208 return intpart; 209 } 210 return intpart - 1; 211 } 212 } |