40 lines
1.9 KiB
XML
40 lines
1.9 KiB
XML
|
<?xml version="1.0" encoding="UTF-8"?>
|
||
|
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
|
||
|
<pkgmetadata>
|
||
|
<maintainer type="project">
|
||
|
<email>haskell@gentoo.org</email>
|
||
|
<name>Gentoo Haskell</name>
|
||
|
</maintainer>
|
||
|
<longdescription>
|
||
|
"Data.Scientific" provides the number type 'Scientific'. Scientific numbers are
|
||
|
arbitrary precision and space efficient. They are represented using
|
||
|
<http://en.wikipedia.org/wiki/Scientific_notation scientific notation>.
|
||
|
The implementation uses a coefficient @c :: 'Integer'@ and a base-10 exponent
|
||
|
@e :: 'Int'@. A scientific number corresponds to the
|
||
|
'Fractional' number: @'fromInteger' c * 10 '^^' e@.
|
||
|
|
||
|
Note that since we're using an 'Int' to represent the exponent these numbers
|
||
|
aren't truly arbitrary precision. I intend to change the type of the exponent
|
||
|
to 'Integer' in a future release.
|
||
|
|
||
|
The main application of 'Scientific' is to be used as the target of parsing
|
||
|
arbitrary precision numbers coming from an untrusted source. The advantages
|
||
|
over using 'Rational' for this are that:
|
||
|
|
||
|
* A 'Scientific' is more efficient to construct. Rational numbers need to be
|
||
|
constructed using '%' which has to compute the 'gcd' of the 'numerator' and
|
||
|
'denominator'.
|
||
|
|
||
|
* 'Scientific' is safe against numbers with huge exponents. For example:
|
||
|
@1e1000000000 :: 'Rational'@ will fill up all space and crash your
|
||
|
program. Scientific works as expected:
|
||
|
|
||
|
>>> read "1e1000000000" :: Scientific
|
||
|
1.0e1000000000
|
||
|
|
||
|
* Also, the space usage of converting scientific numbers with huge exponents to
|
||
|
@'Integral's@ (like: 'Int') or @'RealFloat's@ (like: 'Double' or 'Float')
|
||
|
will always be bounded by the target type.
|
||
|
</longdescription>
|
||
|
</pkgmetadata>
|