package jmathlib.toolbox.general; import jmathlib.core.tokens.numbertokens.DoubleNumberToken; import jmathlib.core.tokens.Token; import jmathlib.core.tokens.OperandToken; import jmathlib.core.functions.ExternalFunction; import jmathlib.core.interpreter.GlobalValues; /**External function to calculate the number of permutations when k objects are taken from a set of k*/ public class permutations extends ExternalFunction { /**calculate the number of permutations @param operand[0] = The the number of objects taken @param operand[1] = The total number of objects @return the number of permutations */ public OperandToken evaluate(Token[] operands, GlobalValues globals) { OperandToken result = new DoubleNumberToken(0); if (getNArgIn(operands) != 2) throwMathLibException("permutations: number of arguments != 2"); if(operands.length >= 2 && operands[0] instanceof DoubleNumberToken && operands[1] instanceof DoubleNumberToken) { //perm(x y) = y!/(y-x)! DoubleNumberToken objects = ((DoubleNumberToken)operands[0]); DoubleNumberToken total = ((DoubleNumberToken)operands[1]); //temp = y-x OperandToken temp = ((OperandToken)total.clone()); temp = temp.subtract(objects); //temp = (y-x)! temp = temp.factorial(); //result = y! / (y-x)! result = total.factorial(); result = result.divide(temp); } return result; } } /* @GROUP general @SYNTAX answer = PERMUTATIONS(items, total) @DOC Returns the number of permutations when taking count items from a set of total items. @EXAMPLES PERMUTATIONS(3,5) = 60 PERMUTATIONS(3,6) = 120 @NOTES @SEE combinations */