# scientific-0.3.5.2: Numbers represented using scientific notation

`Data.Scientific`

provides the number type `Scientific`

. Scientific numbers are
arbitrary precision and space efficient. They are represented using
scientific notation.
The implementation uses a coefficient `c :: `

and a base-10 exponent
`Integer`

`e :: `

. A scientific number corresponds to the
`Int`

`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 ::`

will fill up all space and crash your program. Scientific works as expected:`Rational`

> read "1e1000000000" :: Scientific 1.0e1000000000

- Also, the space usage of converting scientific numbers with huge exponents to

(like:`Integral`

s`Int`

) or

(like:`RealFloat`

s`Double`

or`Float`

) will always be bounded by the target type.

- Data
- ByteString
- Data.Scientific
- Text
- Lazy