Reputation: 4544
I know Haskell has native data types which allow you to have really big integers so things like
>> let x = 131242358045284502395482305
>> x
131242358045284502395482305
work as expected. I was wondering if there was a similar "large precision float" native structure I could be using, so things like
>> let x = 5.0000000000000000000000001
>> x
5.0000000000000000000000001
could be possible. If I enter this in Haskell, it truncates down to 5 if I go beyond 15 decimal places (double precision).
Upvotes: 28
Views: 16157
Reputation: 16645
I believe the standard package for arbitrary precision floating point numbers is now https://hackage.haskell.org/package/scientific
Upvotes: 1
Reputation: 522
Haskell does not have high-precision floating-point numbers naitively.
For a package/module/library for this purpose, I'd refer to this answer to another post. There's also an example which shows how to use this package, called numbers.
Upvotes: 9
Reputation: 298
If you need a high precision /fast/ floating point calculations, you may need to use FFI and long doubles, as the native Haskell type is not implemented yet (see https://ghc.haskell.org/trac/ghc/ticket/3353).
Upvotes: 1
Reputation: 64740
Depending on exactly what you are looking for:
Float
and Double
- pretty much what you know and "love" from Floats and Doubles in all other languages.Rational
which is a Ratio
of Integer
sFixedPoint
- This package provides arbitrary sized fixed point values. For example, if you want a number that is represented by 64 integral bits and 64 fractional bits you can use FixedPoint6464
. If you want a number that is 1024 integral bits and 8 fractional bits then use $(mkFixedPoint 1024 8)
to generate type FixedPoint1024_8
.numbers
package mentioned above - very cool.Upvotes: 22