documentation changes for rationals.
This commit is contained in:
		
							
								
								
									
										110
									
								
								docs/yap.tex
									
									
									
									
									
								
							
							
						
						
									
										110
									
								
								docs/yap.tex
									
									
									
									
									
								
							@@ -3174,6 +3174,12 @@ Checks whether @var{T} is a database reference.
 | 
			
		||||
@cnindex float/1
 | 
			
		||||
Checks whether @var{T} is a floating point number.
 | 
			
		||||
 | 
			
		||||
@item rational(@var{T}) [ISO]
 | 
			
		||||
@findex rational/1
 | 
			
		||||
@syindex rational/1
 | 
			
		||||
@cyindex rational/1
 | 
			
		||||
Checks whether @code{T} is a rational number.
 | 
			
		||||
 | 
			
		||||
@item integer(@var{T}) [ISO]
 | 
			
		||||
@findex integer/1
 | 
			
		||||
@syindex integer/1
 | 
			
		||||
@@ -3190,7 +3196,7 @@ The opposite of @code{var(@var{T})}.
 | 
			
		||||
@findex number/1
 | 
			
		||||
@syindex number/1
 | 
			
		||||
@cyindex number/1
 | 
			
		||||
Checks whether @code{T} is an integer or a float.
 | 
			
		||||
Checks whether @code{T} is an integer, rational or a float.
 | 
			
		||||
 | 
			
		||||
@item primitive(@var{T})
 | 
			
		||||
@findex primitive/1
 | 
			
		||||
@@ -3640,16 +3646,18 @@ variables come before numbers, numbers come before atoms which in turn
 | 
			
		||||
come before compound terms, i.e.: variables @@< numbers @@< atoms @@<
 | 
			
		||||
compound terms.
 | 
			
		||||
@item
 | 
			
		||||
variables are roughly ordered by "age" (the "oldest" variable is put
 | 
			
		||||
Variables are roughly ordered by "age" (the "oldest" variable is put
 | 
			
		||||
first);
 | 
			
		||||
@item
 | 
			
		||||
floating point numbers are sorted in increasing order;
 | 
			
		||||
Floating point numbers are sorted in increasing order;
 | 
			
		||||
@item
 | 
			
		||||
Rational numbers are sorted in increasing order;
 | 
			
		||||
@item
 | 
			
		||||
Integers are sorted in increasing order;
 | 
			
		||||
@item
 | 
			
		||||
atoms are sorted in lexicographic order;
 | 
			
		||||
Atoms are sorted in lexicographic order;
 | 
			
		||||
@item
 | 
			
		||||
compound terms are ordered first by arity of the main functor, then by
 | 
			
		||||
Compound terms are ordered first by arity of the main functor, then by
 | 
			
		||||
the name of the main functor, and finally by their arguments in
 | 
			
		||||
left-to-right order.
 | 
			
		||||
@end itemize
 | 
			
		||||
@@ -3779,8 +3787,50 @@ of length @var{S}.
 | 
			
		||||
 | 
			
		||||
@node Arithmetic, I/O, Comparing Terms, Top
 | 
			
		||||
@section Arithmetic
 | 
			
		||||
Arithmetic expressions in YAP may use the following operators
 | 
			
		||||
or @i{evaluable predicates}:
 | 
			
		||||
 | 
			
		||||
YAP now supposets several different numeric types:
 | 
			
		||||
 | 
			
		||||
@table @code
 | 
			
		||||
@item integers
 | 
			
		||||
      When YAP is built using the GNU multiple precision arithmetic
 | 
			
		||||
      library (GMP), integer arithmetic is unbounded, which means that
 | 
			
		||||
      the size of integers is limited by available memory only. Without
 | 
			
		||||
      GMP, SWI-Prolog integers have the same size as an address. The
 | 
			
		||||
      type of integer support can be detected using the Prolog flags
 | 
			
		||||
      bounded, min_integer and max_integer. As the use of GMP is
 | 
			
		||||
      default, most of the following descriptions assume unbounded
 | 
			
		||||
      integer arithmetic.
 | 
			
		||||
 | 
			
		||||
      Internally, SWI-Prolog has three integer representations. Small
 | 
			
		||||
      integers (defined by the Prolog flag max_tagged_integer) are
 | 
			
		||||
      encoded directly. Larger integers are represented as cell values
 | 
			
		||||
      on the global stack. Integers that do not fit in 64-bit are
 | 
			
		||||
      represented as serialised GNU MPZ structures on the global stack.
 | 
			
		||||
 | 
			
		||||
@item number
 | 
			
		||||
      Rational numbers (Q) are quotients of two integers. Rational
 | 
			
		||||
      arithmetic is only provided if GMP is used (see above). Rational
 | 
			
		||||
      numbers that are returned from is/2 are canonical, which means M
 | 
			
		||||
      is positive and N and M have no common divisors. Rational numbers
 | 
			
		||||
      are introduced in the computation using the rational/1,
 | 
			
		||||
      rationalize/1 or the rdiv/2 (rational division) function. 
 | 
			
		||||
 | 
			
		||||
@item float
 | 
			
		||||
      Floating point numbers are represented using the C-type double. On most today platforms these are 64-bit IEEE floating point numbers.
 | 
			
		||||
 | 
			
		||||
@end table
 | 
			
		||||
 | 
			
		||||
Arithmetic functions that require integer arguments accept, in addition
 | 
			
		||||
to integers, rational numbers with denominator `1' and floating point
 | 
			
		||||
numbers that can be accurately converted to integers. If the required
 | 
			
		||||
argument is a float the argument is converted to float. Note that
 | 
			
		||||
conversion of integers to floating point numbers may raise an overflow
 | 
			
		||||
exception. In all other cases, arguments are converted to the same type
 | 
			
		||||
using the order integer to rational number to floating point number.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Arithmetic expressions in YAP may use the following operators or
 | 
			
		||||
@i{evaluable predicates}:
 | 
			
		||||
 | 
			
		||||
@table @code
 | 
			
		||||
 | 
			
		||||
@@ -3866,13 +3916,13 @@ Hyperbolic arc cosine.
 | 
			
		||||
Hyperbolic arc tangent.
 | 
			
		||||
 | 
			
		||||
@item lgamma(@var{X})
 | 
			
		||||
gamma function.
 | 
			
		||||
Logarithm of gamma function.
 | 
			
		||||
 | 
			
		||||
@item erf(@var{X})
 | 
			
		||||
gaussian error function.
 | 
			
		||||
Gaussian error function.
 | 
			
		||||
 | 
			
		||||
@item erfc(@var{X})
 | 
			
		||||
complementary gaussian error function.
 | 
			
		||||
Complementary gaussian error function.
 | 
			
		||||
 | 
			
		||||
@item random(@var{X}) [ISO]
 | 
			
		||||
An integer random number between 0 and @var{X}.
 | 
			
		||||
@@ -3904,13 +3954,13 @@ or @var{X} if @var{X} is an integer. In the @code{iso} language mode,
 | 
			
		||||
The absolute value of @var{X}.
 | 
			
		||||
 | 
			
		||||
@item ceiling(@var{X}) [ISO]
 | 
			
		||||
The float that is the smallest integral value not smaller than @var{X}.
 | 
			
		||||
The integer that is the smallest integral value not smaller than @var{X}.
 | 
			
		||||
 | 
			
		||||
In @code{iso} language mode the argument must be a floating
 | 
			
		||||
point-number and the result is an integer.
 | 
			
		||||
 | 
			
		||||
@item floor(@var{X}) [ISO]
 | 
			
		||||
The float that is the greatest integral value not greater than @var{X}.
 | 
			
		||||
The integer that is the greatest integral value not greater than @var{X}.
 | 
			
		||||
 | 
			
		||||
In @code{iso} language mode the argument must be a floating
 | 
			
		||||
point-number and the result is an integer.
 | 
			
		||||
@@ -3931,9 +3981,43 @@ evaluates to a floating-point number return 1.0 for a positive @var{X},
 | 
			
		||||
0.0 for 0.0, and -1.0 otherwise.
 | 
			
		||||
 | 
			
		||||
@item truncate(@var{X}) [ISO]
 | 
			
		||||
The float that is the integral value between @var{X} and 0 closest to
 | 
			
		||||
The integral value between @var{X} and 0 closest to
 | 
			
		||||
@var{X}.
 | 
			
		||||
 | 
			
		||||
@item rational(@var{X})
 | 
			
		||||
Convert the expression @var{X} to a rational number or integer. The
 | 
			
		||||
function returns the input on integers and rational numbers. For
 | 
			
		||||
floating point numbers, the returned rational number exactly represents
 | 
			
		||||
the float. As floats cannot exactly represent all decimal numbers the
 | 
			
		||||
results may be surprising. In the examples below, doubles can represent
 | 
			
		||||
@code{0.25} and the result is as expected, in contrast to the result of
 | 
			
		||||
@code{rational(0.1)}. The function @code{rationalize/1} gives a more
 | 
			
		||||
intuitive result.
 | 
			
		||||
 | 
			
		||||
@example
 | 
			
		||||
?- A is rational(0.25).
 | 
			
		||||
 | 
			
		||||
A is 1 rdiv 4
 | 
			
		||||
?- A is rational(0.1).
 | 
			
		||||
A = 3602879701896397 rdiv 36028797018963968
 | 
			
		||||
@end example
 | 
			
		||||
 | 
			
		||||
@item rationalize(@var{X})
 | 
			
		||||
Convert the Expr to a rational number or integer. The function is
 | 
			
		||||
similar to @code{rational/1}, but the result is only accurate within the
 | 
			
		||||
rounding error of floating point numbers, generally producing a much
 | 
			
		||||
smaller denominator. 
 | 
			
		||||
 | 
			
		||||
@example
 | 
			
		||||
?- A is rationalize(0.25).
 | 
			
		||||
 | 
			
		||||
A = 1 rdiv 4
 | 
			
		||||
?- A is rationalize(0.1).
 | 
			
		||||
 | 
			
		||||
A = 1 rdiv 10
 | 
			
		||||
@end example
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@item max(@var{X},@var{Y})
 | 
			
		||||
The greater value of @var{X} and @var{Y}.
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user