001    package org.codehaus.groovy.runtime.typehandling;
002    
003    /**
004     * FloatingPoint (Double and Float) NumberMath operations
005     * 
006     * @author Steve Goetze
007     */
008    public class FloatingPointMath extends NumberMath {
009    
010            protected static FloatingPointMath instance = new FloatingPointMath();
011            
012            private FloatingPointMath() {}
013                                    
014            protected Number absImpl(Number number) {
015                    return new Double(Math.abs(number.doubleValue()));
016            }
017            
018            protected Number addImpl(Number left, Number right) {
019                    return new Double(left.doubleValue() + right.doubleValue());
020            }
021    
022            protected Number subtractImpl(Number left, Number right) {
023                    return new Double(left.doubleValue() - right.doubleValue());
024            }
025    
026            protected Number multiplyImpl(Number left, Number right) {
027                    return new Double(left.doubleValue() * right.doubleValue());
028            }
029    
030            protected Number divideImpl(Number left, Number right) {
031                    return new Double(left.doubleValue() / right.doubleValue());
032            }
033            protected int compareToImpl(Number left, Number right) {
034                    return Double.compare(left.doubleValue(), right.doubleValue());
035            }
036        
037        protected Number modImpl(Number left, Number right) {
038            return new Double(left.doubleValue() % right.doubleValue());
039        }
040        
041        protected Number negateImpl(Number left) {
042            return new Double(-left.doubleValue());
043        }
044    }