Code:
//Benchmark: Savage
//PPL V0.2
//OMITTED: "RAD" in the original
LOCAL AA;
EXPORT A_SavagePPL()
BEGIN
LOCAL AA;
AA:=1;
FOR I FROM 1 TO 2499 DO
AA:=TAN(ATAN(EXP(LN(√(AA*AA)))))+1
END;
RETURN AA;
END;
MLFOR ()
BEGIN
//LOCAL AA;
RETURN AA:=TAN(ATAN(EXP(LN(√(AA*AA)))))+1;
END;
EXPORT A_SavageMAKE()
BEGIN
//LOCAL AA;
AA:=1;
MAKELIST(MLFOR(),AA,1,2499);
RETURN AA;
END;
#CAS
A_SavageCAS1(f):=
BEGIN
LOCAL aa;
aa:=1;
FOR I FROM 1 TO 2499 DO
aa:=TAN(ATAN(EXP(LN(√(aa*aa)))))+1
END;
RETURN (aa);
END;
#END
A_SavageCAS2()
BEGIN
LOCAL aa;
aa:=1;
FOR I FROM 1 TO 2499 DO
aa:=CAS(TAN(ATAN(EXP(LN(√(aa*aa))))))+1;
END;
RETURN (aa);
END;
RRR(RR)
//REPORT RESULT,RELATIVE ERROR
BEGIN
RETURN {RR,((2500-RR)/2500)};
END;
//APPROX:
//I FIND NO CLEAR WINNER BETWEEN PPL AND MAKE.
//EXACT:
//I FIND CAS2 CONSISTENTLY FASTER THAN CAS1
EXPORT SAVAGE()
BEGIN
LOCAL RR;
PRINT();
PRINT("Savage Benchmark");
PRINT({" PPL1: ",TEVAL(RR:=A_SavagePPL()),RRR(RR)});
PRINT({" MAKE: ",TEVAL(RR:=A_SavageMAKE()),RRR(RR)});
PRINT({" CAS1: ",TEVAL(RR:=A_SavageCAS1("")),RRR(RR)});
PRINT({" CAS2: ",TEVAL(RR:=A_SavageCAS2()),RRR(RR)});
END;