Java tutorial
//package com.java2s; /* * FPInstructionUtils.java * * 6th may, 2007 * (c) 2006 EduMips64 project - Trubia Massimo * * This file is part of the EduMIPS64 project, and is released under the GNU * General Public License. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ public class Main { static String PLUSINFINITY = "0111111111110000000000000000000000000000000000000000000000000000"; static String MINUSINFINITY = "1111111111110000000000000000000000000000000000000000000000000000"; static String PLUSZERO = "0000000000000000000000000000000000000000000000000000000000000000"; static String MINUSZERO = "1000000000000000000000000000000000000000000000000000000000000000"; /** Returns the name of a special value (+-infinity, qnan, snan ) or "value" itself if it isn't a special value */ public static String getSpecialValues(String value) { if (isQNaN(value)) { return "Quiet NaN"; } else if (isSNaN(value)) { return "Signaling NaN"; } else if (isPositiveInfinity(value)) { return "Positive infinity"; } else if (isNegativeInfinity(value)) { return "Negative infinity"; } else if (isPositiveZero(value)) { return "Positive zero"; } else if (isNegativeZero(value)) { return "Negative zero"; } else { return value; } } public static boolean isQNaN(String value) { if (value.matches("[01]111111111110[01]{51}") && !value.matches("[01]111111111110[0]{51}")) { return true; } return false; } public static boolean isSNaN(String value) { if (value.matches("[01]111111111111[01]{51}") && !value.matches("[01]111111111110[0]{51}")) { return true; } return false; } public static boolean isPositiveInfinity(String value) { if (is64BinaryString(value)) { if (value.compareTo(PLUSINFINITY) == 0) { return true; } } return false; } /** Determines if value is a negative infinity according to the IEEE754 standard * @param value the binary string of 64 bits * @return true if the value is negative infinity */ public static boolean isNegativeInfinity(String value) { if (is64BinaryString(value)) { if (value.compareTo(MINUSINFINITY) == 0) { return true; } } return false; } /** Determines if value is a positive zero according to the IEEE754 standard * @param value the binary string of 64 bits * @return true if the value is positive zero */ public static boolean isPositiveZero(String value) { if (is64BinaryString(value)) { if (value.compareTo(PLUSZERO) == 0) { return true; } } return false; } public static boolean isNegativeZero(String value) { if (is64BinaryString(value)) { if (value.compareTo(MINUSZERO) == 0) { return true; } } return false; } /** Determines if the passed value is a binary string of 64 bits * @param value the binary string * @return a boolean value*/ public static boolean is64BinaryString(String value) { if (value.length() == 64 && value.matches("[01]{64}")) { return true; } return false; } }