Artifact e52f5c1245f17ad12eb156cf340f0c4529f133bc012f2567e53a85249f95b339:
- File
psl-1983/3-1/lpt/05-numbers.lpt
— part of check-in
[eb17ceb7f6]
at
2020-04-21 19:40:01
on branch master
— Add Reduce 3.0 to the historical section of the archive, and some more
files relating to version sof PSL from the early 1980s. Thanks are due to
Paul McJones and Nelson Beebe for these, as well as to all the original
authors.git-svn-id: https://svn.code.sf.net/p/reduce-algebra/code/historical@5328 2bfe0521-f11c-4a00-b80e-6202646ff360 (user: arthurcnorman@users.sourceforge.net, size: 38337) [annotate] [blame] [check-ins using] [more...]
- File
psl-1983/lpt/05-numbers.lpt
— part of check-in
[eb17ceb7f6]
at
2020-04-21 19:40:01
on branch master
— Add Reduce 3.0 to the historical section of the archive, and some more
files relating to version sof PSL from the early 1980s. Thanks are due to
Paul McJones and Nelson Beebe for these, as well as to all the original
authors.git-svn-id: https://svn.code.sf.net/p/reduce-algebra/code/historical@5328 2bfe0521-f11c-4a00-b80e-6202646ff360 (user: arthurcnorman@users.sourceforge.net, size: 38337) [annotate] [blame] [check-ins using]
PSL Manual 7 February 1983 Arithmetic Functions section 5.0 page 5.1 CHAPTER 5 CHAPTER 5 CHAPTER 5 NUMBERS AND ARITHMETIC FUNCTIONS NUMBERS AND ARITHMETIC FUNCTIONS NUMBERS AND ARITHMETIC FUNCTIONS 5.1. Big Integers . . . . . . . . . . . . . . . 5.1 5.2. Conversion Between Integers and Floats. . . . . . . 5.2 5.3. Arithmetic Functions. . . . . . . . . . . . . 5.2 5.4. Functions for Numeric Comparison. . . . . . . . . 5.5 5.5. Bit Operations. . . . . . . . . . . . . . . 5.7 5.6. Various Mathematical Functions . . . . . . . . . 5.8 ______ Most of the arithmetic functions in PSL expect numbers as arguments. In all cases an error occurs if the parameter to an arithmetic function is not ______ a number: ***** Non-numeric argument in arithmetic Exceptions to the rule are noted. The underlying machine arithmetic requires parameters to be either all _______ _____ integers or all floats. If a function receives mixed types of arguments, _______ _____ integers are converted to floats before arithmetic operations are ______ _______ performed. The range of numbers which can be represented by an integer is _____ different than that represented by a float. Because of this difference, a conversion is not always possible; an unsuccessful attempt to convert may cause an error to be signalled. The MATHLIB package contains some useful mathematical functions. See Section 5.6 for documentation for these functions. 5.1. Big Integers 5.1. Big Integers 5.1. Big Integers Loading the BIG module redefines the basic arithmetic operations, including the logical operations, to permit arbitrary precision (or "bignum") integer operations. Note that fixnums which are present before loading BIG can cause problems, because loading BIG restricts the legal range of fixnums. 5.2. Conversion Between Integers and Floats 5.2. Conversion Between Integers and Floats 5.2. Conversion Between Integers and Floats The conversions mentioned above can be done explicitly by the following functions. Other functions which alter types can be found in Section 4.3. Arithmetic Functions 7 February 1983 PSL Manual page 5.2 section 5.2 Fix Fix _ ______ _______ ____ (Fix U:number): integer expr _______ Returns the integer which corresponds to the truncated value of _ U. The result of conversion must retain all significant portions _ _ _______ of U. If U is an integer it is returned unchanged. _____ _____ _____ [??? Note that unless big is loaded, a float with value [??? Note that unless big is loaded, a float with value [??? Note that unless big is loaded, a float with value larger than 2**35-1 on the DEC-20 is converted into something larger than 2**35-1 on the DEC-20 is converted into something larger than 2**35-1 on the DEC-20 is converted into something strange but without any error message. Note how truncation strange but without any error message. Note how truncation strange but without any error message. Note how truncation works on negative numbers (always towards zero). ???] works on negative numbers (always towards zero). ???] works on negative numbers (always towards zero). ???] (Fix 2.1) % returns 2 (Fix -2.1) % returns -2 Float Float _ ______ _____ ____ (Float U:number): float expr _____ _ The float corresponding to the value of the argument U is _______ returned. Some of the least significant digits of an integer may Float Float Float Float _____ be lost due to the implementation of Float. Float of a float ______ _ returns the number unchanged. If U is too large to represent in _____ float, an error occurs: ***** Argument to FLOAT is too large _______ _______ _______ [??? Only if big is loaded can one make an integer of value [??? Only if big is loaded can one make an integer of value [??? Only if big is loaded can one make an integer of value greater than 2**35-1, so without big you won't get this error greater than 2**35-1, so without big you won't get this error greater than 2**35-1, so without big you won't get this error message. The largest representable float is message. The largest representable float is message. The largest representable float is (2**62-1)*(2**65) on the DEC-20. ???] (2**62-1)*(2**65) on the DEC-20. ???] (2**62-1)*(2**65) on the DEC-20. ???] 5.3. Arithmetic Functions 5.3. Arithmetic Functions 5.3. Arithmetic Functions The functions described below handle arithmetic operations. Please note the remarks at the beginning of this Chapter regarding the mixing of argument types. Abs Abs _ ______ ______ ____ (Abs U:number): number expr Returns the absolute value of its argument. Add1 Add1 _ ______ ______ ____ (Add1 U:number): number expr _ Returns the value of U plus 1; the returned value is of the same _ _______ _____ type as U (integer or float). PSL Manual 7 February 1983 Arithmetic Functions section 5.3 page 5.3 Decr Decr _ ____ __ ______ ______ _____ (Decr U:form [Xi:number]): number macro Part of the USEFUL package (LOAD USEFUL). With only one argument, this is equivalent to (SETF U (SUB1 U)) With multiple arguments, it is equivalent to (SETF U (DIFFERENCE U (PLUS X1 ... Xn))) 1 lisp> (Load Useful) NIL 2 lisp> (Setq Y '(1 5 7)) (1 5 7) 3 lisp> (Decr (Car Y)) 0 4 lisp> Y (0 5 7) 5 lisp> (Decr (Cadr Y) 3 4) -2 6 lisp> Y (0 -2 7) Difference Difference _ ______ _ ______ ______ ____ (Difference U:number V:number): number expr _ _ The value of U - V is returned. Divide Divide _ ______ _ ______ ____ ____ (Divide U:number V:number): pair expr ____ ________ _________ The pair (quotient . remainder) is returned, as if the quotient Quotient Quotient part was computed by the Quotient function and the remainder by Remainder Remainder the Remainder function. An error occurs if division by zero is attempted: ***** Attempt to divide by 0 in Divide Expt Expt _ ______ _ _______ ______ ____ (Expt U:number V:integer): number expr _ _ _____ _ _______ _ Returns U raised to the V power. A float U to an integer power V ___ _ _____ does not have V changed to a float before exponentiation. Incr Incr _ ____ __ ______ ______ _____ (Incr U:form [Xi:number]): number macro Part of the USEFUL package (LOAD USEFUL). With only one argument, this is equivalent to Arithmetic Functions 7 February 1983 PSL Manual page 5.4 section 5.3 (SETF U (ADD1 U)) With multiple arguments it is equivalent to (SETF U (PLUS U X1 ... Xn)) Minus Minus _ ______ ______ ____ (Minus U:number): number expr _ Returns -U. Plus Plus _ ______ ______ _____ (Plus [U:number]): number macro Plus Plus Forms the sum of all its arguments. Plus may be called with only Plus Plus one argument. In this case it returns its argument. If Plus is called with no arguments, it returns zero. Plus2 Plus2 _ ______ _ ______ ______ ____ (Plus2 U:number V:number): number expr _ _ Returns the sum of U and V. Quotient Quotient _ ______ _ ______ ______ ____ (Quotient U:number V:number): number expr Quotient Quotient _ _ The Quotient of U divided by V is returned. Division of two _______ _ positive or two negative integers is conventional. If both U and _ _______ V are integers and exactly one of them is negative, the value Quotient Abs Quotient Abs _ returned is the negative truncation of the Quotient of Abs U and Abs Abs _ _____ _____ Abs V. If either argument is a float, a float is returned which _____ is exact within the implemented precision of floats. An error occurs if division by zero is attempted: ***** Attempt to divide by 0 in QUOTIENT Recip Recip _ ______ _____ ____ (Recip U:number): float expr Recip Recip _ _____ Recip converts U to a float if necessary, and then finds the Quotient Quotient inverse using the function Quotient. Remainder Remainder _ ______ _ ______ ______ ____ (Remainder U:number V:number): number expr _ _ _______ _______ If both U and V are integers the result is the integer remainder _ _ _____ of U divided by V. If either parameter is a float, the result is _ _ _ _ _____ the difference between U and V*(U/V), all in float (probably ______ 0.0). If either number is negative the remainder is negative. If both are positive or both are negative the remainder is _ positive. An error occurs if V is zero: PSL Manual 7 February 1983 Arithmetic Functions section 5.3 page 5.5 ***** Attempt to divide by 0 in REMAINDER Remainder Mod Remainder Mod Note that the Remainder function differs from the Mod function in Remainder Remainder _ _ that Remainder returns a negative number when U is negative and V is positive. Sub1 Sub1 _ ______ ______ ____ (Sub1 U:number): number expr _ _ _____ Returns the value of U minus 1. If U is a float, the value _ returned is U minus 1.0. Times Times _ ______ ______ _____ (Times [U:number]): number macro Times Times Returns the product of all its arguments. Times may be called with only one argument. In this case it returns the value of its Times Times argument. If Times is called with no arguments, it returns 1. Times2 Times2 _ ______ _ ______ ______ ____ (Times2 U:number V:number): number expr _ _ Returns the product of U and V. 5.4. Functions for Numeric Comparison 5.4. Functions for Numeric Comparison 5.4. Functions for Numeric Comparison The following functions compare the values of their arguments. For functions testing equality (or non-equality) see Section 4.2.1. Geq Geq _ ___ _ ___ _______ ____ (Geq U:any V:any): boolean expr _ _ Returns T if U >= V, otherwise returns NIL. In RLISP, the symbol ">=" can be used. GreaterP GreaterP _ ______ _ ______ _______ ____ (GreaterP U:number V:number): boolean expr _ _ Returns T if U is strictly greater than V, otherwise returns NIL. In RLISP, the symbol ">" can be used. Leq Leq _ ______ _ ______ _______ ____ (Leq U:number V:number): boolean expr _ _ Returns T if U <= V, otherwise returns NIL. In RLISP, the symbol "<=" can be used. Arithmetic Functions 7 February 1983 PSL Manual page 5.6 section 5.4 LessP LessP _ ______ _ ______ _______ ____ (LessP U:number V:number): boolean expr _ _ Returns T if U is strictly less than V, otherwise returns NIL. In RLISP, the symbol "<" can be used. Max Max _ ______ ______ _____ (Max [U:number]): number macro _ Returns the largest of the values in U (numeric maximum). If two or more values are the same, the first is returned. Max2 Max2 _ ______ _ ______ ______ ____ (Max2 U:number V:number): number expr _ _ _ _ Returns the larger of U and V. If U and V are of the same value _ _ _ U is returned (U and V might be of different types). Min Min _ ______ ______ _____ (Min [U:number]): number macro _ Returns the smallest (numeric minimum) of the values in U. If two or more values are the same, the first of these is returned. Min2 Min2 _ ______ _ ______ ______ ____ (Min2 U:number V:number): number expr _ _ Returns the smaller of its arguments. If U and V are the same _ _ _ value, U is returned (U and V might be of different types). MinusP MinusP _ ___ _______ ____ (MinusP U:any): boolean expr _ ______ _ ______ Returns T if U is a number and less than 0. If U is not a number ______ or is a positive number, NIL is returned. OneP OneP _ ___ _______ ____ (OneP U:any): boolean expr _ ______ Returns T if U is a number and has the value 1 or 1.0. Returns NIL otherwise. ZeroP ZeroP _ ___ _______ ____ (ZeroP U:any): boolean expr _ ______ Returns T if U is a number and has the value 0 or 0.0. Returns NIL otherwise. PSL Manual 7 February 1983 Arithmetic Functions section 5.5 page 5.7 5.5. Bit Operations 5.5. Bit Operations 5.5. Bit Operations The functions described in this section operate on the binary _______ representation of the integers given as arguments. The returned value is _______ an integer. LAnd LAnd _ _______ _ _______ _______ ____ (LAnd U:integer V:integer): integer expr And And Bitwise or logical And. Each bit of the result is independently determined from the corresponding bits of the operands according to the following table. _ U 0 0 1 1 _ V 0 1 0 1 Returned Value 0 0 0 1 LOr LOr _ _______ _ _______ _______ ____ (LOr U:integer V:integer): integer expr Or Or Bitwise or logical Or. Each bit of the result is independently determined from corresponding bits of the operands according to the following table. _ U 0 0 1 1 _ V 0 1 0 1 Returned Value 0 1 1 1 LNot LNot _ _______ _______ ____ (LNot U:integer): integer expr Not Not _ ______ Logical Not. Defined as (-U + 1) so that it works for bignums as if they were 2's complement. [??? need to clarify a bit more ???] [??? need to clarify a bit more ???] [??? need to clarify a bit more ???] LXOr LXOr _ _______ _ _______ _______ ____ (LXOr U:integer V:integer): integer expr Or Or Bitwise or logical exclusive Or. Each bit of the result is independently determined from the corresponding bits of the operands according to the following table. _ U 0 0 1 1 _ V 0 1 0 1 Returned Value 0 1 1 0 LShift LShift _ _______ _ _______ _______ ____ (LShift N:integer K:integer): integer expr _ _ Shifts N to the left by K bits. The effect is similar to Arithmetic Functions 7 February 1983 PSL Manual page 5.8 section 5.5 _ K _ multiplying by 2 . It is an arithmetic shift. Negative values _ are acceptable for K, and cause a right shift (in the usual manner). 5.6. Various Mathematical Functions 5.6. Various Mathematical Functions 5.6. Various Mathematical Functions The optionally loadable MATHLIB module defines several commonly used mathematical functions. Some effort has been made to be compatible with Common Lisp, but this implementation tends to support fewer features. The examples used here should be taken with a grain of salt, since the precision of the results will depend on the machine being used, and may change in later implementations of the module. Ceiling Ceiling _ ______ _______ ____ (Ceiling X:number): integer expr _______ _ Returns the smallest integer greater than or equal to X. For example: 1 lisp> (ceiling 2.1) 3 2 lisp> (ceiling -2.1) -2 Floor Floor _ ______ _______ ____ (Floor X:number): integer expr _ Returns the largest integer less than or equal to X. (Note that Fix Fix this differs from the Fix function.) 1 lisp> (floor 2.1) 2 2 lisp> (floor -2.1) -3 3 lisp> (fix -2.1) -2 Round Round _ ______ _______ ____ (Round X:number): integer expr 1 _ Returns the nearest integer to X. _______________ 1 Round Round The behavior of Round is ambiguous when its argument ends in ".5"--needs more work. PSL Manual 7 February 1983 Arithmetic Functions section 5.6 page 5.9 TransferSign TransferSign _ ______ ___ ______ ______ ____ (TransferSign S:number Val:number): number expr abs _ ___ abs ___ _ Transfers the sign of S to VAL by returning abs(VAL) if S >= 0, abs sign abs ___ sign and -abs(VAL) otherwise. (The same as FORTRANs sign function.) Mod Mod _ _______ _ _______ _______ ____ (Mod M:integer N:integer): integer expr remainder _ _ remainder Returns M modulo N. Unlike the remainder function, it returns a _ _ _ _ _ positive number in the range 0..N-1 when N is positive, even if M is negative. 1 lisp> (mod -7 5) 3 2 lisp> (remainder -7 5) -2 [??? Allow to "number" arguments instead of just "integers"? [??? Allow to "number" arguments instead of just "integers"? [??? Allow to "number" arguments instead of just "integers"? ???] ???] ???] DegreesToRadians DegreesToRadians _ ______ ______ ____ (DegreesToRadians X:number): number expr Returns an angle in radians given an angle in degrees. 1 lisp> (DegreesToRadians 180) 3.1415926 RadiansToDegrees RadiansToDegrees _ ______ ______ ____ (RadiansToDegrees X:number): number expr Returns an angle in degrees given an angle in radians. 1 lisp> (RadiansToDegrees 3.1415926) 180.0 RadiansToDMS RadiansToDMS _ ______ ____ ____ (RadiansToDMS X:number): list expr _ _______ Given an angle X in radians, returns a list of three integers giving the angle in (Degrees Minutes Seconds) . 1 lisp> (RadiansToDMS 1.0) (57 17 45) Arithmetic Functions 7 February 1983 PSL Manual page 5.10 section 5.6 DMStoRadians DMStoRadians ____ ______ ____ ______ ____ ______ ______ ____ (DMStoRadians Degs:number Mins:number Secs:number): number expr Returns an angle in radians, given three arguments representing an angle in degrees minutes and seconds. 1 lisp> (DMStoRadians 57 17 45) 1.0000009 2 lisp> (DMStoRadians 180 0 0) 3.1415926 DegreesToDMS DegreesToDMS _ ______ ____ ____ (DegreesToDMS X:number): list expr _ _______ Given an angle X in degrees, returns a list of three integers giving the angle in (Degrees Minutes Seconds). DMStoDegrees DMStoDegrees ____ ______ ____ ______ ____ ______ ______ ____ (DMStoDegrees Degs:number Mins:number Secs:number): number expr Returns an angle in degrees, given three arguments representing an angle in degrees minutes and seconds. Sin Sin _ ______ ______ ____ (Sin X:number): number expr sine sine _ Returns the sine of X, an angle in radians. SinD SinD _ ______ ______ ____ (SinD X:number): number expr sine sine _ Returns the sine of X, an angle in degrees. Cos Cos _ ______ ______ ____ (Cos X:number): number expr cosine cosine _ Returns the cosine of X, an angle in radians. CosD CosD _ ______ ______ ____ (CosD X:number): number expr cosine cosine _ Returns the cosine of X, an angle in degrees. Tan Tan _ ______ ______ ____ (Tan X:number): number expr tangent tangent _ Returns the tangent of X, an angle in radians. TanD TanD _ ______ ______ ____ (TanD X:number): number expr tangent tangent _ Returns the tangent of X, an angle in degrees. PSL Manual 7 February 1983 Arithmetic Functions section 5.6 page 5.11 Cot Cot _ ______ ______ ____ (Cot X:number): number expr cotangent cotangent _ Returns the cotangent of X, an angle in radians. CotD CotD _ ______ ______ ____ (CotD X:number): number expr cotangent cotangent _ Returns the cotangent of X, an angle in degrees. Sec Sec _ ______ ______ ____ (Sec X:number): number expr secant secant _ Returns the secant of X, an angle in radians. secant(X) = 1/cos(X) SecD SecD _ ______ ______ ____ (SecD X:number): number expr secant secant _ Returns the secant of X, an angle in degrees. Csc Csc _ ______ ______ ____ (Csc X:number): number expr cosecant cosecant _ Returns the cosecant of X, an angle in radians. secant(X) = 1/sin(X) CscD CscD _ ______ ______ ____ (CscD X:number): number expr cosecant cosecant _ Returns the cosecant of X, an angle in degrees. Asin Asin _ ______ ______ ____ (Asin X:number): number expr arc sine arc sine _ Returns the arc sine, as an angle in radians, of X. sin(asin(X)) = X AsinD AsinD _ ______ ______ ____ (AsinD X:number): number expr arc sine arc sine _ Returns the arc sine, as an angle in degrees, of X. Arithmetic Functions 7 February 1983 PSL Manual page 5.12 section 5.6 Acos Acos _ ______ ______ ____ (Acos X:number): number expr arc cosine arc cosine _ Returns the arc cosine, as an angle in radians, of X. cos(acos(X)) = X AcosD AcosD _ ______ ______ ____ (AcosD X:number): number expr arc cosine arc cosine _ Returns the arc cosine, as an angle in degrees, of X. Atan Atan _ ______ ______ ____ (Atan X:number): number expr arc tangent arc tangent _ Returns the arc tangent, as an angle in radians, of X. tan(atan(X)) = X AtanD AtanD _ ______ ______ ____ (AtanD X:number): number expr arc tangent arc tangent _ Returns the arc tangent, as an angle in degrees, of X. Atan2 Atan2 _ ______ _ ______ ______ ____ (Atan2 Y:number X:number): number expr Returns an angle in radians corresponding to the angle between _ _ _ the X axis and the vector (X,Y). (Note that Y is the first argument.) 1 lisp> (atan2 0 -1) 3.1415927 Atan2D Atan2D _ ______ _ ______ ______ ____ (Atan2D Y:number X:number): number expr Returns an angle in degrees corresponding to the angle between _ _ the X axis and the vector (X,Y). 1 lisp> (atan2D -1 1) 315.0 Acot Acot _ ______ ______ ____ (Acot X:number): number expr arc cotangent arc cotangent _ Returns the arc cotangent, as an angle in radians, of X. cot(acot(X)) = X PSL Manual 7 February 1983 Arithmetic Functions section 5.6 page 5.13 AcotD AcotD _ ______ ______ ____ (AcotD X:number): number expr arc cotangent arc cotangent _ Returns the arc cotangent, as an angle in degrees, of X. Asec Asec _ ______ ______ ____ (Asec X:number): number expr arc secant arc secant _ Returns the arc secant, as an angle in radians, of X. sec(asec(X)) = X AsecD AsecD _ ______ ______ ____ (AsecD X:number): number expr arc secant arc secant _ Returns the arc secant, as an angle in degrees, of X. Acsc Acsc _ ______ ______ ____ (Acsc X:number): number expr arc cosecant arc cosecant _ Returns the arc cosecant, as an angle in radians, of X. csc(acsc(X)) = X AcscD AcscD _ ______ ______ ____ (AcscD X:number): number expr arc cosecant arc cosecant _ Returns the arc cosecant, as an angle in degrees, of X. Sqrt Sqrt _ ______ ______ ____ (Sqrt X:number): number expr _ Returns the square root of X. Exp Exp _ ______ ______ ____ (Exp X:number): number expr _ X _ _ Returns the exponential of X, i.e. e . Log Log _ ______ ______ ____ (Log X:number): number expr _ _ Returns the natural (base e) logarithm of X. log(exp(X)) = X Arithmetic Functions 7 February 1983 PSL Manual page 5.14 section 5.6 Log2 Log2 _ ______ ______ ____ (Log2 X:number): number expr _ Returns the base two logarithm of X. Log10 Log10 _ ______ ______ ____ (Log10 X:number): number expr _ Returns the base ten logarithm of X. Random Random _ _______ _______ ____ (Random N:integer): integer expr Returns a pseudo-random number uniformly selected from the range _ 0..N-1. The random number generator uses a linear congruential method. To get a reproducible sequence of random numbers you should assign one (or some other small number) to the FLUID variable RANDOMSEED. __________ ______ RANDOMSEED [Initially: set from time] global Factorial Factorial _ _______ _______ ____ (Factorial N:integer): integer expr _ Returns the factorial of N. factorial(0) = 1 factorial(N) = N*factorial(N-1)