| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.commons.math4.userguide; |
| |
| import org.apache.commons.math4.PerfTestUtils; |
| import org.apache.commons.math4.util.FastMath; |
| |
| /** |
| * Performance benchmark for FastMath. |
| * |
| */ |
| public class FastMathTestPerformance { |
| private static final int RUNS = Integer.parseInt(System.getProperty("testRuns","10000000")); |
| private static final double F1 = 1d / RUNS; |
| |
| // Header format |
| private static final String FMT_HDR = "%-13s %13s %13s %13s Runs=%d Java %s (%s) %s (%s)"; |
| // Detail format |
| private static final String FMT_DTL = "%-13s %6d %6.1f %6d %6.4f %6d %6.4f"; |
| |
| public static void main(String[] args) { |
| System.out.println(String.format(FMT_HDR, |
| "Name","StrictMath","FastMath","Math",RUNS, |
| System.getProperty("java.version"), |
| System.getProperty("java.runtime.version","?"), |
| System.getProperty("java.vm.name"), |
| System.getProperty("java.vm.version") |
| )); |
| testAbs(); |
| testAcos(); |
| testAsin(); |
| testAtan(); |
| testAtan2(); |
| testCbrt(); |
| testCos(); |
| testCosh(); |
| testExp(); |
| testExpm1(); |
| testHypot(); |
| testLog(); |
| testLog10(); |
| testLog1p(); |
| testPow(); |
| testSin(); |
| testSinh(); |
| testSqrt(); |
| testTan(); |
| testTanh(); |
| testIEEEremainder(); |
| |
| testSimpleBenchmark(); |
| } |
| |
| @SuppressWarnings("boxing") |
| private static void report(String name, long strictMathTime, long fastMathTime, long mathTime) { |
| long unitTime = strictMathTime; |
| System.out.println(String.format(FMT_DTL, |
| name, |
| strictMathTime / RUNS, (double) strictMathTime / unitTime, |
| fastMathTime / RUNS, (double) fastMathTime / unitTime, |
| mathTime / RUNS, (double) mathTime / unitTime |
| )); |
| } |
| |
| private static void assertTrue(boolean condition) { |
| if (!condition) { |
| System.err.println("assertion failed!"); |
| System.exit(1); |
| } |
| } |
| private static void testLog() { |
| double x = 0; |
| long time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += StrictMath.log(0.01 + i); |
| } |
| long strictMath = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += FastMath.log(0.01 + i); |
| } |
| long fastTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += Math.log(0.01 + i); |
| } |
| long mathTime = System.nanoTime() - time; |
| |
| report("log",strictMath,fastTime,mathTime); |
| assertTrue(!Double.isNaN(x)); |
| } |
| |
| private static void testLog10() { |
| double x = 0; |
| long time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += StrictMath.log10(0.01 + i); |
| } |
| long strictMath = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += FastMath.log10(0.01 + i); |
| } |
| long fastTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += Math.log10(0.01 + i); |
| } |
| long mathTime = System.nanoTime() - time; |
| |
| report("log10",strictMath,fastTime,mathTime); |
| assertTrue(!Double.isNaN(x)); |
| } |
| |
| private static void testLog1p() { |
| double x = 0; |
| long time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += StrictMath.log1p(-0.9 + i); |
| } |
| long strictMath = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += FastMath.log1p(-0.9 + i); |
| } |
| long fastTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += Math.log1p(-0.9 + i); |
| } |
| long mathTime = System.nanoTime() - time; |
| |
| report("log1p",strictMath,fastTime,mathTime); |
| assertTrue(!Double.isNaN(x)); |
| } |
| |
| private static void testPow() { |
| double x = 0; |
| long time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += StrictMath.pow(0.01 + i * F1, i * F1); |
| } |
| long strictTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += FastMath.pow(0.01 + i * F1, i * F1); |
| } |
| long fastTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += Math.pow(0.01 + i * F1, i * F1); |
| } |
| long mathTime = System.nanoTime() - time; |
| report("pow",strictTime,fastTime,mathTime); |
| assertTrue(!Double.isNaN(x)); |
| } |
| |
| private static void testExp() { |
| double x = 0; |
| long time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += StrictMath.exp(100 * i * F1); |
| } |
| long strictTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += FastMath.exp(100 * i * F1); |
| } |
| long fastTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += Math.exp(100 * i * F1); |
| } |
| long mathTime = System.nanoTime() - time; |
| |
| report("exp",strictTime,fastTime,mathTime); |
| assertTrue(!Double.isNaN(x)); |
| } |
| |
| private static void testSin() { |
| double x = 0; |
| long time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += StrictMath.sin(100 * (i - RUNS/2) * F1); |
| } |
| long strictTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += FastMath.sin(100 * (i - RUNS/2) * F1); |
| } |
| long fastTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += Math.sin(100 * (i - RUNS/2) * F1); |
| } |
| long mathTime = System.nanoTime() - time; |
| |
| report("sin",strictTime,fastTime,mathTime); |
| assertTrue(!Double.isNaN(x)); |
| } |
| |
| private static void testAsin() { |
| double x = 0; |
| long time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += StrictMath.asin(0.999 * (i - RUNS/2) * F1); |
| } |
| long strictTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += FastMath.asin(0.999 * (i - RUNS/2) * F1); |
| } |
| long fastTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += Math.asin(0.999 * (i - RUNS/2) * F1); |
| } |
| long mathTime = System.nanoTime() - time; |
| |
| report("asin",strictTime,fastTime,mathTime); |
| assertTrue(!Double.isNaN(x)); |
| } |
| |
| private static void testCos() { |
| double x = 0; |
| long time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += StrictMath.cos(100 * (i - RUNS/2) * F1); |
| } |
| long strictTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += FastMath.cos(100 * (i - RUNS/2) * F1); |
| } |
| long fastTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += Math.cos(100 * (i - RUNS/2) * F1); |
| } |
| long mathTime = System.nanoTime() - time; |
| |
| report("cos",strictTime,fastTime,mathTime); |
| assertTrue(!Double.isNaN(x)); |
| } |
| |
| private static void testAcos() { |
| double x = 0; |
| long time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += StrictMath.acos(0.999 * (i - RUNS/2) * F1); |
| } |
| long strictTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += FastMath.acos(0.999 * (i - RUNS/2) * F1); |
| } |
| long fastTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += Math.acos(0.999 * (i - RUNS/2) * F1); |
| } |
| long mathTime = System.nanoTime() - time; |
| report("acos",strictTime,fastTime,mathTime); |
| assertTrue(!Double.isNaN(x)); |
| } |
| |
| private static void testTan() { |
| double x = 0; |
| long time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += StrictMath.tan(100 * (i - RUNS/2) * F1); |
| } |
| long strictTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += FastMath.tan(100 * (i - RUNS/2) * F1); |
| } |
| long fastTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += Math.tan(100 * (i - RUNS/2) * F1); |
| } |
| long mathTime = System.nanoTime() - time; |
| |
| report("tan",strictTime,fastTime,mathTime); |
| assertTrue(!Double.isNaN(x)); |
| } |
| |
| private static void testAtan() { |
| double x = 0; |
| long time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += StrictMath.atan(100 * (i - RUNS/2) * F1); |
| } |
| long strictTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += FastMath.atan(100 * (i - RUNS/2) * F1); |
| } |
| long fastTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += Math.atan(100 * (i - RUNS/2) * F1); |
| } |
| long mathTime = System.nanoTime() - time; |
| |
| report("atan",strictTime,fastTime,mathTime); |
| assertTrue(!Double.isNaN(x)); |
| } |
| |
| private static void testAtan2() { |
| double x = 0; |
| long time = System.nanoTime(); |
| int max = (int) FastMath.floor(FastMath.sqrt(RUNS)); |
| for (int i = 0; i < max; i++) { |
| for (int j = 0; j < max; j++) { |
| x += StrictMath.atan2((i - max/2) * (100.0 / max), (j - max/2) * (100.0 / max)); |
| } |
| } |
| long strictTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < max; i++) { |
| for (int j = 0; j < max; j++) { |
| x += FastMath.atan2((i - max/2) * (100.0 / max), (j - max/2) * (100.0 / max)); |
| } |
| } |
| long fastTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < max; i++) { |
| for (int j = 0; j < max; j++) { |
| x += Math.atan2((i - max/2) * (100.0 / max), (j - max/2) * (100.0 / max)); |
| } |
| } |
| long mathTime = System.nanoTime() - time; |
| |
| report("atan2",strictTime,fastTime,mathTime); |
| assertTrue(!Double.isNaN(x)); |
| } |
| |
| private static void testHypot() { |
| double x = 0; |
| long time = System.nanoTime(); |
| int max = (int) FastMath.floor(FastMath.sqrt(RUNS)); |
| for (int i = 0; i < max; i++) { |
| for (int j = 0; j < max; j++) { |
| x += StrictMath.atan2((i - max/2) * (100.0 / max), (j - max/2) * (100.0 / max)); |
| } |
| } |
| long strictTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < max; i++) { |
| for (int j = 0; j < max; j++) { |
| x += FastMath.atan2((i - max/2) * (100.0 / max), (j - max/2) * (100.0 / max)); |
| } |
| } |
| long fastTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < max; i++) { |
| for (int j = 0; j < max; j++) { |
| x += Math.atan2((i - max/2) * (100.0 / max), (j - max/2) * (100.0 / max)); |
| } |
| } |
| long mathTime = System.nanoTime() - time; |
| |
| report("hypot",strictTime,fastTime,mathTime); |
| assertTrue(!Double.isNaN(x)); |
| } |
| |
| private static void testIEEEremainder() { |
| double x = 0; |
| long time = System.nanoTime(); |
| int max = (int) FastMath.floor(FastMath.sqrt(RUNS)); |
| for (int i = 0; i < max; i++) { |
| for (int j = 0; j < max; j++) { |
| x += StrictMath.IEEEremainder((i - max/2) * (100.0 / max), (j + 1) * (100.0 / max)); |
| } |
| } |
| long strictTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < max; i++) { |
| for (int j = 0; j < max; j++) { |
| x += FastMath.IEEEremainder((i - max/2) * (100.0 / max), (j + 1) * (100.0 / max)); |
| } |
| } |
| long fastTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < max; i++) { |
| for (int j = 0; j < max; j++) { |
| x += Math.IEEEremainder((i - max/2) * (100.0 / max), (j + 1) * (100.0 / max)); |
| } |
| } |
| long mathTime = System.nanoTime() - time; |
| |
| report("IEEEremainder",strictTime,fastTime,mathTime); |
| assertTrue(!Double.isNaN(x)); |
| } |
| |
| private static void testCbrt() { |
| double x = 0; |
| long time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += StrictMath.cbrt(100 * i * F1); |
| } |
| long strictTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += FastMath.cbrt(100 * i * F1); |
| } |
| long fastTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += Math.cbrt(100 * i * F1); |
| } |
| long mathTime = System.nanoTime() - time; |
| |
| report("cbrt",strictTime,fastTime,mathTime); |
| assertTrue(!Double.isNaN(x)); |
| } |
| |
| private static void testSqrt() { |
| double x = 0; |
| long time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += StrictMath.sqrt(100 * i * F1); |
| } |
| long strictTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += FastMath.sqrt(100 * i * F1); |
| } |
| long fastTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += Math.sqrt(100 * i * F1); |
| } |
| long mathTime = System.nanoTime() - time; |
| |
| report("sqrt",strictTime,fastTime,mathTime); |
| assertTrue(!Double.isNaN(x)); |
| } |
| |
| private static void testCosh() { |
| double x = 0; |
| long time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += StrictMath.cosh(100 * (i - RUNS/2) * F1); |
| } |
| long strictTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += FastMath.cosh(100 * (i - RUNS/2) * F1); |
| } |
| long fastTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += Math.cosh(100 * (i - RUNS/2) * F1); |
| } |
| long mathTime = System.nanoTime() - time; |
| |
| report("cosh",strictTime,fastTime,mathTime); |
| assertTrue(!Double.isNaN(x)); |
| } |
| |
| private static void testSinh() { |
| double x = 0; |
| long time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += StrictMath.sinh(100 * (i - RUNS/2) * F1); |
| } |
| long strictTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += FastMath.sinh(100 * (i - RUNS/2) * F1); |
| } |
| long fastTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += Math.sinh(100 * (i - RUNS/2) * F1); |
| } |
| long mathTime = System.nanoTime() - time; |
| |
| report("sinh",strictTime,fastTime,mathTime); |
| assertTrue(!Double.isNaN(x)); |
| } |
| |
| private static void testTanh() { |
| double x = 0; |
| long time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += StrictMath.tanh(100 * (i - RUNS/2) * F1); |
| } |
| long strictTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += FastMath.tanh(100 * (i - RUNS/2) * F1); |
| } |
| long fastTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += Math.tanh(100 * (i - RUNS/2) * F1); |
| } |
| long mathTime = System.nanoTime() - time; |
| |
| report("tanh",strictTime,fastTime,mathTime); |
| assertTrue(!Double.isNaN(x)); |
| } |
| |
| private static void testExpm1() { |
| double x = 0; |
| long time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += StrictMath.expm1(100 * (i - RUNS/2) * F1); |
| } |
| long strictTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += FastMath.expm1(100 * (i - RUNS/2) * F1); |
| } |
| long fastTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += Math.expm1(100 * (i - RUNS/2) * F1); |
| } |
| long mathTime = System.nanoTime() - time; |
| report("expm1",strictTime,fastTime,mathTime); |
| assertTrue(!Double.isNaN(x)); |
| } |
| |
| private static void testAbs() { |
| double x = 0; |
| long time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += StrictMath.abs(i * (1 - 0.5 * RUNS)); |
| } |
| long strictTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += FastMath.abs(i * (1 - 0.5 * RUNS)); |
| } |
| long fastTime = System.nanoTime() - time; |
| |
| x = 0; |
| time = System.nanoTime(); |
| for (int i = 0; i < RUNS; i++) { |
| x += Math.abs(i * (1 - 0.5 * RUNS)); |
| } |
| long mathTime = System.nanoTime() - time; |
| |
| report("abs",strictTime,fastTime,mathTime); |
| assertTrue(!Double.isNaN(x)); |
| } |
| |
| @SuppressWarnings("boxing") |
| private static void testSimpleBenchmark() { |
| final String SM = "StrictMath"; |
| final String M = "Math"; |
| final String FM = "FastMath"; |
| |
| final int maxWidth = 15; |
| final int numStat = 100; |
| final int numCall = RUNS / numStat; |
| |
| final double x = Math.random(); |
| final double y = Math.random(); |
| |
| PerfTestUtils.timeAndReport("log", |
| maxWidth, |
| numCall, |
| numStat, |
| false, |
| new PerfTestUtils.RunTest(SM) { |
| @Override |
| public Double call() throws Exception { |
| return StrictMath.log(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(M) { |
| @Override |
| public Double call() throws Exception { |
| return Math.log(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(FM) { |
| @Override |
| public Double call() throws Exception { |
| return FastMath.log(x); |
| } |
| }); |
| |
| PerfTestUtils.timeAndReport("log10", |
| maxWidth, |
| numCall, |
| numStat, |
| false, |
| new PerfTestUtils.RunTest(SM) { |
| @Override |
| public Double call() throws Exception { |
| return StrictMath.log10(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(M) { |
| @Override |
| public Double call() throws Exception { |
| return Math.log10(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(FM) { |
| @Override |
| public Double call() throws Exception { |
| return FastMath.log10(x); |
| } |
| }); |
| |
| PerfTestUtils.timeAndReport("log1p", |
| maxWidth, |
| numCall, |
| numStat, |
| false, |
| new PerfTestUtils.RunTest(SM) { |
| @Override |
| public Double call() throws Exception { |
| return StrictMath.log1p(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(M) { |
| @Override |
| public Double call() throws Exception { |
| return Math.log1p(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(FM) { |
| @Override |
| public Double call() throws Exception { |
| return FastMath.log1p(x); |
| } |
| }); |
| |
| PerfTestUtils.timeAndReport("pow", |
| maxWidth, |
| numCall, |
| numStat, |
| false, |
| new PerfTestUtils.RunTest(SM) { |
| @Override |
| public Double call() throws Exception { |
| return StrictMath.pow(x, y); |
| } |
| }, |
| new PerfTestUtils.RunTest(M) { |
| @Override |
| public Double call() throws Exception { |
| return Math.pow(x, y); |
| } |
| }, |
| new PerfTestUtils.RunTest(FM) { |
| @Override |
| public Double call() throws Exception { |
| return FastMath.pow(x, y); |
| } |
| }); |
| |
| PerfTestUtils.timeAndReport("exp", |
| maxWidth, |
| numCall, |
| numStat, |
| false, |
| new PerfTestUtils.RunTest(SM) { |
| @Override |
| public Double call() throws Exception { |
| return StrictMath.exp(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(M) { |
| @Override |
| public Double call() throws Exception { |
| return Math.exp(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(FM) { |
| @Override |
| public Double call() throws Exception { |
| return FastMath.exp(x); |
| } |
| }); |
| |
| PerfTestUtils.timeAndReport("sin", |
| maxWidth, |
| numCall, |
| numStat, |
| false, |
| new PerfTestUtils.RunTest(SM) { |
| @Override |
| public Double call() throws Exception { |
| return StrictMath.sin(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(M) { |
| @Override |
| public Double call() throws Exception { |
| return Math.sin(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(FM) { |
| @Override |
| public Double call() throws Exception { |
| return FastMath.sin(x); |
| } |
| }); |
| |
| PerfTestUtils.timeAndReport("asin", |
| maxWidth, |
| numCall, |
| numStat, |
| false, |
| new PerfTestUtils.RunTest(SM) { |
| @Override |
| public Double call() throws Exception { |
| return StrictMath.asin(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(M) { |
| @Override |
| public Double call() throws Exception { |
| return Math.asin(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(FM) { |
| @Override |
| public Double call() throws Exception { |
| return FastMath.asin(x); |
| } |
| }); |
| |
| PerfTestUtils.timeAndReport("cos", |
| maxWidth, |
| numCall, |
| numStat, |
| false, |
| new PerfTestUtils.RunTest(SM) { |
| @Override |
| public Double call() throws Exception { |
| return StrictMath.cos(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(M) { |
| @Override |
| public Double call() throws Exception { |
| return Math.cos(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(FM) { |
| @Override |
| public Double call() throws Exception { |
| return FastMath.cos(x); |
| } |
| }); |
| |
| PerfTestUtils.timeAndReport("acos", |
| maxWidth, |
| numCall, |
| numStat, |
| false, |
| new PerfTestUtils.RunTest(SM) { |
| @Override |
| public Double call() throws Exception { |
| return StrictMath.acos(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(M) { |
| @Override |
| public Double call() throws Exception { |
| return Math.acos(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(FM) { |
| @Override |
| public Double call() throws Exception { |
| return FastMath.acos(x); |
| } |
| }); |
| |
| PerfTestUtils.timeAndReport("tan", |
| maxWidth, |
| numCall, |
| numStat, |
| false, |
| new PerfTestUtils.RunTest(SM) { |
| @Override |
| public Double call() throws Exception { |
| return StrictMath.tan(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(M) { |
| @Override |
| public Double call() throws Exception { |
| return Math.tan(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(FM) { |
| @Override |
| public Double call() throws Exception { |
| return FastMath.tan(x); |
| } |
| }); |
| |
| PerfTestUtils.timeAndReport("atan", |
| maxWidth, |
| numCall, |
| numStat, |
| false, |
| new PerfTestUtils.RunTest(SM) { |
| @Override |
| public Double call() throws Exception { |
| return StrictMath.atan(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(M) { |
| @Override |
| public Double call() throws Exception { |
| return Math.atan(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(FM) { |
| @Override |
| public Double call() throws Exception { |
| return FastMath.atan(x); |
| } |
| }); |
| |
| PerfTestUtils.timeAndReport("atan2", |
| maxWidth, |
| numCall, |
| numStat, |
| false, |
| new PerfTestUtils.RunTest(SM) { |
| @Override |
| public Double call() throws Exception { |
| return StrictMath.atan2(x, y); |
| } |
| }, |
| new PerfTestUtils.RunTest(M) { |
| @Override |
| public Double call() throws Exception { |
| return Math.atan2(x, y); |
| } |
| }, |
| new PerfTestUtils.RunTest(FM) { |
| @Override |
| public Double call() throws Exception { |
| return FastMath.atan2(x, y); |
| } |
| }); |
| |
| PerfTestUtils.timeAndReport("hypot", |
| maxWidth, |
| numCall, |
| numStat, |
| false, |
| new PerfTestUtils.RunTest(SM) { |
| @Override |
| public Double call() throws Exception { |
| return StrictMath.hypot(x, y); |
| } |
| }, |
| new PerfTestUtils.RunTest(M) { |
| @Override |
| public Double call() throws Exception { |
| return Math.hypot(x, y); |
| } |
| }, |
| new PerfTestUtils.RunTest(FM) { |
| @Override |
| public Double call() throws Exception { |
| return FastMath.hypot(x, y); |
| } |
| }); |
| |
| |
| PerfTestUtils.timeAndReport("cbrt", |
| maxWidth, |
| numCall, |
| numStat, |
| false, |
| new PerfTestUtils.RunTest(SM) { |
| @Override |
| public Double call() throws Exception { |
| return StrictMath.cbrt(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(M) { |
| @Override |
| public Double call() throws Exception { |
| return Math.cbrt(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(FM) { |
| @Override |
| public Double call() throws Exception { |
| return FastMath.cbrt(x); |
| } |
| }); |
| |
| PerfTestUtils.timeAndReport("sqrt", |
| maxWidth, |
| numCall, |
| numStat, |
| false, |
| new PerfTestUtils.RunTest(SM) { |
| @Override |
| public Double call() throws Exception { |
| return StrictMath.sqrt(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(M) { |
| @Override |
| public Double call() throws Exception { |
| return Math.sqrt(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(FM) { |
| @Override |
| public Double call() throws Exception { |
| return FastMath.sqrt(x); |
| } |
| }); |
| |
| PerfTestUtils.timeAndReport("cosh", |
| maxWidth, |
| numCall, |
| numStat, |
| false, |
| new PerfTestUtils.RunTest(SM) { |
| @Override |
| public Double call() throws Exception { |
| return StrictMath.cosh(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(M) { |
| @Override |
| public Double call() throws Exception { |
| return Math.cosh(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(FM) { |
| @Override |
| public Double call() throws Exception { |
| return FastMath.cosh(x); |
| } |
| }); |
| |
| PerfTestUtils.timeAndReport("sinh", |
| maxWidth, |
| numCall, |
| numStat, |
| false, |
| new PerfTestUtils.RunTest(SM) { |
| @Override |
| public Double call() throws Exception { |
| return StrictMath.sinh(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(M) { |
| @Override |
| public Double call() throws Exception { |
| return Math.sinh(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(FM) { |
| @Override |
| public Double call() throws Exception { |
| return FastMath.sinh(x); |
| } |
| }); |
| |
| PerfTestUtils.timeAndReport("tanh", |
| maxWidth, |
| numCall, |
| numStat, |
| false, |
| new PerfTestUtils.RunTest(SM) { |
| @Override |
| public Double call() throws Exception { |
| return StrictMath.tanh(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(M) { |
| @Override |
| public Double call() throws Exception { |
| return Math.tanh(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(FM) { |
| @Override |
| public Double call() throws Exception { |
| return FastMath.tanh(x); |
| } |
| }); |
| |
| PerfTestUtils.timeAndReport("expm1", |
| maxWidth, |
| numCall, |
| numStat, |
| false, |
| new PerfTestUtils.RunTest(SM) { |
| @Override |
| public Double call() throws Exception { |
| return StrictMath.expm1(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(M) { |
| @Override |
| public Double call() throws Exception { |
| return Math.expm1(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(FM) { |
| @Override |
| public Double call() throws Exception { |
| return FastMath.expm1(x); |
| } |
| }); |
| |
| PerfTestUtils.timeAndReport("abs", |
| maxWidth, |
| numCall, |
| numStat, |
| false, |
| new PerfTestUtils.RunTest(SM) { |
| @Override |
| public Double call() throws Exception { |
| return StrictMath.abs(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(M) { |
| @Override |
| public Double call() throws Exception { |
| return Math.abs(x); |
| } |
| }, |
| new PerfTestUtils.RunTest(FM) { |
| @Override |
| public Double call() throws Exception { |
| return FastMath.abs(x); |
| } |
| }); |
| } |
| } |