mirror of
				https://github.com/DanilaFe/abacus
				synced 2025-11-03 18:33:41 -08:00 
			
		
		
		
	Change ceiling and floor to return NumberInterface. Add fractional part function. Add intValue function. Change StandardPlugin correspondingly.
This commit is contained in:
		
							parent
							
								
									c027a23dcb
								
							
						
					
					
						commit
						44ad5b3a6c
					
				@ -94,13 +94,23 @@ public class NaiveNumber implements NumberInterface {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public int ceiling() {
 | 
			
		||||
        return (int) Math.ceil(value);
 | 
			
		||||
    public NumberInterface ceiling() {
 | 
			
		||||
        return new NaiveNumber(Math.ceil(value));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public int floor() {
 | 
			
		||||
        return (int) Math.floor(value);
 | 
			
		||||
    public NumberInterface floor() {
 | 
			
		||||
        return new NaiveNumber(Math.floor(value));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public NumberInterface fractionalPart() {
 | 
			
		||||
        return new NaiveNumber(value - Math.floor(value));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public int intValue() {
 | 
			
		||||
        return (int)value;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
 | 
			
		||||
@ -83,13 +83,26 @@ public interface NumberInterface {
 | 
			
		||||
     * Returns the least integer greater than or equal to the number.
 | 
			
		||||
     * @return the least integer >= the number, if int can hold the value.
 | 
			
		||||
     */
 | 
			
		||||
    int ceiling();
 | 
			
		||||
    NumberInterface ceiling();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Return the greatest integer less than or equal to the number.
 | 
			
		||||
     * @return the greatest int >= the number, if int can hold the value.
 | 
			
		||||
     */
 | 
			
		||||
    int floor();
 | 
			
		||||
    NumberInterface floor();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the fractional part of the number.
 | 
			
		||||
     * @return the fractional part of the number.
 | 
			
		||||
     */
 | 
			
		||||
    NumberInterface fractionalPart();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the integer representation of this number, discarding any fractional part,
 | 
			
		||||
     * if int can hold the value.
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    int intValue();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Promotes this class to another number class.
 | 
			
		||||
 | 
			
		||||
@ -96,13 +96,38 @@ public class PreciseNumber implements NumberInterface {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public int ceiling() {
 | 
			
		||||
        return (int) Math.ceil(value.doubleValue());
 | 
			
		||||
    public NumberInterface ceiling() {
 | 
			
		||||
        String str = value.toPlainString();
 | 
			
		||||
        int decimalIndex = str.indexOf('.');
 | 
			
		||||
        if(decimalIndex != -1){
 | 
			
		||||
            return this.floor().add(ONE);
 | 
			
		||||
        }
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public int floor() {
 | 
			
		||||
        return (int) Math.floor(value.doubleValue());
 | 
			
		||||
    public NumberInterface floor() {
 | 
			
		||||
        String str = value.toPlainString();
 | 
			
		||||
        int decimalIndex = str.indexOf('.');
 | 
			
		||||
        if(decimalIndex != -1){
 | 
			
		||||
            return new PreciseNumber(str.substring(0, decimalIndex));
 | 
			
		||||
        }
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public NumberInterface fractionalPart() {
 | 
			
		||||
        String str = value.toPlainString();
 | 
			
		||||
        int decimalIndex = str.indexOf('.');
 | 
			
		||||
        if(decimalIndex != -1){
 | 
			
		||||
            return new PreciseNumber(str.substring(decimalIndex + 1));
 | 
			
		||||
        }
 | 
			
		||||
        return ZERO;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public int intValue() {
 | 
			
		||||
        return value.intValue();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
 | 
			
		||||
@ -174,7 +174,7 @@ public class StandardPlugin extends Plugin {
 | 
			
		||||
                //right and left refer to lhs and rhs in the above inequality.
 | 
			
		||||
                NumberInterface sum = NaiveNumber.ONE.promoteTo(params[0].getClass());
 | 
			
		||||
                NumberInterface nextNumerator = params[0];
 | 
			
		||||
                NumberInterface left = params[0].multiply((new NaiveNumber(3)).promoteTo(params[0].getClass()).intPow(params[0].ceiling())), right = maxError;
 | 
			
		||||
                NumberInterface left = params[0].multiply((new NaiveNumber(3)).promoteTo(params[0].getClass()).intPow(params[0].ceiling().intValue())), right = maxError;
 | 
			
		||||
                do{
 | 
			
		||||
                    sum = sum.add(nextNumerator.divide(factorial(params[0].getClass(), n+1)));
 | 
			
		||||
                    n++;
 | 
			
		||||
@ -434,7 +434,7 @@ public class StandardPlugin extends Plugin {
 | 
			
		||||
    private static NumberInterface getSmallAngle(NumberInterface phi){
 | 
			
		||||
        NumberInterface twoPi = getPi(phi.getClass()).multiply(new NaiveNumber("2").promoteTo(phi.getClass()));
 | 
			
		||||
        NumberInterface theta = FUNCTION_ABS.apply(phi).subtract(twoPi
 | 
			
		||||
        .multiply(new NaiveNumber(FUNCTION_ABS.apply(phi).divide(twoPi).floor()).promoteTo(phi.getClass()))); //Now theta is in [0, 2pi).
 | 
			
		||||
        .multiply(FUNCTION_ABS.apply(phi).divide(twoPi))); //Now theta is in [0, 2pi).
 | 
			
		||||
        if(phi.signum() < 0){
 | 
			
		||||
            theta = twoPi.subtract(theta);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user