/* * $Id$ * * Copyright (C) 2003-2015 JNode.org * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; If not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ package org.jnode.test; import java.io.PrintStream; /** * Test of floating point operations * * @author epr */ public class FPTest { public static void main(String[] args) throws InterruptedException { Runnable r = new Runnable() { public void run() { final PrintStream out = System.out; testFloat(out); Thread.yield(); testDouble(out); Thread.yield(); testTan(out); Thread.yield(); } }; Thread t1 = new Thread(r); Thread t2 = new Thread(r); t1.start(); t2.start(); t1.join(); t2.join(); } private static void testTan(PrintStream out) { out.println("testTan"); for (double i = -5; i < 5; i += 0.5) { final double jvmResult = Math.tan(i); final double cpResult = StrictMathTest.tan(i); if (jvmResult != cpResult) { out.println("tan(" + i + ")=" + jvmResult + "\t" + cpResult); } } final double angle = Math.PI / 4.0; final double a = 1.0 - Math.cos(angle); final double b = Math.tan(angle); final double c = Math.sqrt(1.0 + b * b) - 1 + a; final float cv = (float) (4.0 / 3.0 * a * b / c); out.println("JVM: " + Math.tan(angle) + ", CP: " + StrictMathTest.tan(angle)); out.println("CV: " + cv); } private static void testFloat(PrintStream out) { out.println("testFloat"); final float a = 45.5f; final float b = -7.11f; final double da = a; final double db = b; final int ia = (int) a; final int ib = (int) b; out.println("a " + a); out.println("b " + b); out.println("-a " + (-a)); out.println("-b " + (-b)); out.println("a + b " + (a + b)); out.println("a - b " + (a - b)); out.println("a * b " + (a * b)); out.println("a / b " + (a / b)); out.println("sin(a) " + Math.sin(a)); out.println("asin(a) " + Math.asin(a)); out.println("cos(a) " + Math.cos(a)); out.println("acos(a) " + Math.acos(a)); out.println("tan(a) " + Math.tan(a)); out.println("atan(a) " + Math.atan(a)); out.println("sqrt(a) " + Math.sqrt(a)); out.println("da " + da); out.println("db " + db); out.println("ia " + ia); out.println("ib " + ib); out.println("a == a " + (a == a)); out.println("a != a " + (a != a)); out.println("a > a " + (a > a)); out.println("a >= a " + (a >= a)); out.println("a < a " + (a < a)); out.println("a <= a " + (a <= a)); out.println("a == b " + (a == b)); out.println("a != b " + (a != b)); out.println("a > b " + (a > b)); out.println("a >= b " + (a >= b)); out.println("a < b " + (a < b)); out.println("a <= b " + (a <= b)); out.println(); } private static void testDouble(PrintStream out) { out.println("testDouble"); final double a = 45.5; final double b = -7.11; final float fa = (float) a; final float fb = (float) b; final int ia = (int) a; final int ib = (int) b; out.println("a " + a); out.println("b " + b); out.println("-a " + (-a)); out.println("-b " + (-b)); out.println("a + b " + (a + b)); out.println("a - b " + (a - b)); out.println("a * b " + (a * b)); out.println("a / b " + (a / b)); out.println("sin(a) " + Math.sin(a)); out.println("asin(a) " + Math.asin(a)); out.println("cos(a) " + Math.cos(a)); out.println("acos(a) " + Math.acos(a)); out.println("tan(a) " + Math.tan(a)); out.println("atan(a) " + Math.atan(a)); out.println("sqrt(a) " + Math.sqrt(a)); out.println("fa " + fa); out.println("fb " + fb); out.println("ia " + ia); out.println("ib " + ib); out.println("a == a " + (a == a)); out.println("a != a " + (a != a)); out.println("a > a " + (a > a)); out.println("a >= a " + (a >= a)); out.println("a < a " + (a < a)); out.println("a <= a " + (a <= a)); out.println("a == b " + (a == b)); out.println("a != b " + (a != b)); out.println("a > b " + (a > b)); out.println("a >= b " + (a >= b)); out.println("a < b " + (a < b)); out.println("a <= b " + (a <= b)); out.println(); } }