=pod =encoding utf8 =head1 NAME Muldis::D::Ext::Rational - Muldis D extension for rational data types and operators =head1 VERSION This document is Muldis::D::Ext::Rational version 0.23.0. =head1 PREFACE This document is part of the Muldis D language specification, whose root document is L; you should read that root document before you read this one, which provides subservient details. =head1 DESCRIPTION Muldis D has a mandatory core set of system-defined (eternally available) entities, which is referred to as the I or the I; they are the minimal entities that all Muldis D implementations need to provide; they are mutually self-describing and are used to bootstrap the language; any entities outside the core, called I, are non-mandatory and are defined in terms of the core or each other, but the reverse isn't true. This current C document describes the system-defined I, which consists of rational data types and operators in general, and not just integers such as the language core has. This current document does not describe the polymorphic operators that all types, or some types including core types, have defined over them; said operators are defined once for all types in L. I =head1 TYPE SUMMARY Following are all the data types described in this document, arranged in a type graph according to their proper sub|supertype relationships (but that a few of them just reappear from the core set to provide a similar context, and aren't re-described here): sys.std.Core.Type.Universal sys.std.Core.Type.Empty sys.std.Core.Type.Scalar # The following are all regular ordered scalar types. sys.std.Rational.Type.Rat sys.std.Rational.Type.URat sys.std.Rational.Type.PRat sys.std.Rational.Type.BRat sys.std.Rational.Type.DRat sys.std.Core.Type.Int sys.std.Core.Type.UInt sys.std.Core.Type.PInt # These are all integer types. sys.std.Rational.Type.PInt2_N # These are all finite integer types. sys.std.Rational.Type.PInt2_36 # The following are all regular non-ordered scalar types. sys.std.Rational.Type.E_RM sys.std.Core.Type.Tuple # The following are all regular tuple types. sys.std.Rational.Type.RatRoundRule I =head1 SYSTEM-DEFINED RATIONAL-CONCERNING DATA TYPES =head2 sys.std.Rational.Type.PInt2_N A C is a proper subtype of C where all member values are greater than 1. Its default and minimum value is 2. =head2 sys.std.Rational.Type.PInt2_36 A C is a proper subtype of C where all member values are between 2 and 36. (The significance of the number 36 is 10 digits plus 26 letters.) Its maximum value is 36. The cardinality of this type is 35. =head2 sys.std.Rational.Type.Rat A C (scalar) is a single exact rational number of any magnitude and precision. It is conceptually a composite type with 2 main system-defined possreps, called C and C, both of which are defined over several C. The C possrep consists of 2 attributes: C (an C), C (a C); the conceptual value of a C is the result of rational-dividing its C by its C. Because in the general case there are an infinite set of [C,C] integer pairs that denote the same rational value, the C possrep carries the normalization constraint that C and C must be coprime, that is, they have no common integer factors other than 1. The C possrep consists of 3 attributes: C (an C), C (a C), C (an C); the conceptual value of a C is the result of multiplying its C by the result of taking its C to the power of its C. The C possrep carries the normalization constraint that among all the [C,C,C] triples which would denote the same rational value, the only allowed triple is the one having both the C with the lowest value (that is closest to or equal to 2) and the C with the highest value (that is closest to positive infinity). I The default value of C is zero; its minimum and maximum values are conceptually infinities and practically impossible. The cardinality of this type is infinity; to define a most-generalized finite C subtype, you must specify the greatest magnitude value denominator, plus the the 2 integer end-points of the inclusive range of the value numerator; or alternately you must specify the greatest magnitude value mantissa (the I of the number), and specify the greatest magnitude value radix, plus the the 2 integer end-points of the inclusive range of the value exponent (the I of the number). Common subtypes specify that the normalized radixes of all their values are either 2 or 10; types such as these will easily map exactly to common human or physical numeric representations, so they tend to perform better. =head2 sys.std.Rational.Type.URat A C (unsigned / non-negative rational) is a proper subtype of C where all member values are greater than or equal to zero (that is, the C|C is greater than or equal to zero). Its minimum value is zero. =head2 sys.std.Rational.Type.PRat A C (positive rational) is a proper subtype of C where all member values are greater than zero (that is, the C|C is greater than zero). Its default value is 1. =head2 sys.std.Rational.Type.BRat A C (binary rational) is a proper subtype of C where the C is 2; it is the best option to exactly represent rational numbers that are conceptually binary or octal or hexadecimal. =head2 sys.std.Rational.Type.DRat A C (decimal rational) is a proper subtype of C where the C is 10 (or if it could be without the C possrep normalization constraint); it is the best option to exactly represent rational numbers that are conceptually the decimal numbers that humans typically work with. =head2 sys.std.Rational.Type.E_RM A C (rounding method) is a scalar enumeration consisting of the 7 values C, C, C, C, C, C, C. When a value of some ordered type needs to be mapped into a proper subtype that doesn't contain that value, such as when mapping an arbitrary number to one with less precision, some rounding method is applied to determine which value of the subtype is to be mapped to while most accurately reflecting the original value. The C type enumerates the rounding methods that Muldis D operators can typically apply. With C, C, and C (aka I, I, I, or I), the original value will be mapped to the single target value that it is closest to, if there is one; otherwise, if it is exactly half-way between 2 adjacent target values, then C will round towards negative infinity, C will round towards positive infinity, and C will round towards the nearest "even" target. With C, C, C (aka I), C, the original value will always be mapped to the single adjacent value that is lower than it, or higher than it, or towards "zero" from it, or towards the nearer infinity from it, respectively. The default value of C is C, since that is the most commonly used method of rounding. =head2 sys.std.Rational.Type.RatRoundRule A C is a C. It specifies a controlled (and typically degrading) coercion of a real number into a rational number having a specific radix and precision. It is mainly used to deterministically massage an operation, whose conceptual result is generally an irrational number, so that its actual result is a best approximating rational number. It is also used to define a generic rounding operation on a rational number that derives a typically less precise rational. A C has these 3 attributes: C (a C), C (a C), and C (a C). The rational resulting from the operation is as close as possible to the conceptual result but that its denominator is a non-negative power of C and said denominator is not larger than C; if rounding is needed, then C dictates the rounding method. The default value of C specifies a coersion to a whole number using the C rounding method (its radix is 2 and its max denom is 1). =head1 SYSTEM-DEFINED RATIONAL-CONCERNING FUNCTIONS These functions are essentially selectors and attribute extractors for the conceptual possrep of a rational in terms of an integral numerator plus denominator. =over =item C This selector function results in the C value that arguments collectively map to as the attributes of the result's C possrep; however, the arguments do not have to be the canonical/normalized attribute values, but constitute any other pair that denotes the same rational value. =item C This selector function results in the C value that arguments collectively map to as the attributes of the result's C possrep; however, the arguments do not have to be the canonical/normalized attribute values, but constitute any other triple that denotes the same rational. =item C This function results in the canonical C of its argument. =item C This function results in the canonical C of its argument. =item C This function results in the canonical C of its argument. =back These functions implement commonly used rational numeric operations. =over =item C This function results in the absolute value of its argument. =item C This function results in the sum of the N element values of its argument; it is a reduction operator that recursively takes each pair of input values and adds (which is both commutative and associative) them together until just one is left, which is the result. If C has zero values, then C results in the rational zero, which is the identity value for addition. =item C This function results in the difference when its C argument is subtracted from its C argument. =item C This function results in the product of the N element values of its argument; it is a reduction operator that recursively takes each pair of input values and multiplies (which is both commutative and associative) them together until just one is left, which is the result. If C has zero values, then C results in the rational 1, which is the identity value for multiplication. =item C This function results in the quotient when its C argument is divided by its C argument using rational division. This function will fail if C is zero. =item C This function is exactly the same as C except that it results in a C of what is otherwise the result, and that result has zero elements if C is zero. =item C This function results in the difference between the lowest and highest element values of its argument. If C has zero values, then C results in the rational zero. =item C This function results in the mean or arithmetic average of the N element values of its argument. It is equivalent to first taking the sum of the input values, and dividing that sum by the count of the input values. If C has zero values, then this function will fail. =item C This function is exactly the same as C except that it results in a C of what is otherwise the result, and that result has zero elements if C has zero values. =item C This function results in the 1 or 2 median values of the N element values of its argument; they are returned as a set. It is equivalent to first arranging the input values from least to greatest, and then taking the single middle value, if the count of input values is odd, or taking the 2 middle values, if the count of input values is even (but if the 2 middle values are the same value, the output has one element). If C has zero values, then the result set is empty. =item C This function is a wrapper over C that will result in the mean of its result elements; it will fail if there are zero elements. =item C This function results in the mode of the N element values of its argument; it is the set of values that appear the most often as input elements, and all have the same count of occurrances. As a trivial case, if all input elements have the same count of occurrances, then they will all be in the output. If C has zero values, then the result set is empty. =item C This function results in the rational that is equal to or otherwise nearest to its C argument, where the nearest is determined by the rational rounding rule specified by the C argument. =item C This function results in its (positive rational) C argument taken to the power of its C argument. Note that, while this function might conceptually have multiple real number results for some fractional C, it will always only result in the one that is positive. =item C This function results in the logarithm of its C argument to the base given in its (positive rational) C argument. Since the result would be an irrational number in the general case, the C argument specifies how to coerce the conceptual result into a rational number that is the actual result. =item C This function results in the special mathematical constant I (which is the base of the natural logarithm) taken to the power of its C argument. The C parameter is as per C. =item C This function results in the natural logarithm of its C argument. The C parameter is as per C. =back These functions convert between C values and canonically formatted representations of rationals as character strings. =over =item C This selector function results in the C value that its (not-empty) C argument maps to when the whole character string is evaluated as a base-C rational. Extending the typical formats of [base-2, base-8, base-10, base-16], this function supports base-2 through base-36; to get the latter, the characters 0-9 and A-Z represent values in 0-35. This function will fail if C can't be mapped as specified. =item C This selector function results in the (not-empty) C value where its C argument is formatted as a base-C rational. =back These functions convert between C values and equal or nearly equal C values. =over =item C This selector function results in the C value that is conceptually equal to its C argument. =item C This selector function results in the C value that is conceptually equal to or otherwise nearest to its C argument, where the nearest is determined by the rounding method specified by the C argument. =back =head1 SEE ALSO Go to L for the majority of distribution-internal references, and L for the majority of distribution-external references. =head1 AUTHOR Darren Duncan (C) =head1 LICENSE AND COPYRIGHT This file is part of the formal specification of the Muldis D language. Muldis D is Copyright © 2002-2008, Darren Duncan. See the LICENSE AND COPYRIGHT of L for details. =head1 TRADEMARK POLICY The TRADEMARK POLICY in L applies to this file too. =head1 ACKNOWLEDGEMENTS The ACKNOWLEDGEMENTS in L apply to this file too. =cut