This is Java code:
package com.test.day13.num;/** * @author BigBird * @date 2011-12-11 下午10:12:33 * @action 測試判斷一個數是正數還是負數 */public class NumTest { public static boolean positive(double f) { final boolean pos0[] = {true}; final boolean posn[] = {false, true}; if (f == 0.0) return true; while (true) { // If f is in ]-1.0; 1.0[, multiply it by 2 and restart. try { if (pos0[(int) f]) { f *= 2.0; continue; } } catch (Exception e) { } // If f is in ]-2.0; -1.0] U [1.0; 2.0[, return the proper answer. try { return posn[(int) ((f+1.5)/2)]; } catch (Exception e) { } // f is outside ]-2.0; 2.0[, divide by 2 and restart. f /= 2.0; } } static void check(double f) { System.out.println(f + " -> " + positive(f)); } public static void main(String args[]) { for (double i = -10.0; i <= 10.0; i++) check(i); check(-1e24); check(-1e-24); check(1e-24);check(1e24);}}
The output is:
-10.0 -> false-9.0 -> false-8.0 -> false-7.0 -> false-6.0 -> false-5.0 -> false-4.0 -> false-3.0 -> false-2.0 -> false-1.0 -> false0.0 -> true1.0 -> true2.0 -> true3.0 -> true4.0 -> true5.0 -> true6.0 -> true7.0 -> true8.0 -> true9.0 -> true10.0 -> true-1.0E24 -> false-1.0E-24 -> false1.0E-24 -> true1.0E24 -> true