/** * This module contains strategies for operating on real numbers. * * In Stratego, real numbers are primitive terms, separate from * integers. The precision of the reals match that of the underlying * runtime platform, which currently always is the ANSI C library. * * @author Eelco Visser <visser@acm.org> * @author Karl Trygve Kalleberg <karltk@strategoxt.org> - documentation */ module term/real strategies /** Predicate to check if the current term is a real number. * * @type Real -> Real */ is-real = ?x; prim("SSL_is_real",x) /** Compute cosine of a real number. * * @type Real -> Real */ cos = ?x; prim("SSL_cos",x) /** Compute sine of a real number. * * @type Real -> Real */ sin = ?x; prim("SSL_sin",x) /** Compute square of a real number. * * Note: The number sqrt is applied to must be non-negative, as complex * numbers are not supported. * * @type Real -> Real */ sqrt = ?x; prim("SSL_sqrt",x) /** Compute arc tangent of a par of real numbers. The result, when applied to * the pair (x,y), is the arc tangent of y/x, expressed as radians between * -PI and PI. The signs of the parameters x and y are used to determine the * correct quadrant. * * @type Real -> Real */ atan2 = ?(x,y); prim("SSL_atan2",x,y) /** Convert a real to a string with default (maximal) precision. * * @type Real -> String */ real-to-string = ?x; prim("SSL_real_to_string",x) /** Convert a real to a string with given precision. * * The term argument prec specifies the number of digits after the * period is required. The result is rounded. * * Example: <real-to-string(2)> 12.124 => "12.12" * * @type prec Int * @type Real -> String */ real-to-string(|prec) = ?x; prim("SSL_real_to_string_precision",x,prec) /** Construct a real from a string. * * Example: <string-to-real> "123.0e+02" * * @type String -> Real */ string-to-real = ?x; prim("SSL_string_to_real",x) /** Construct a real from an int. * * @type Int -> Real */ real = ?x; prim("SSL_real",x)