-
Notifications
You must be signed in to change notification settings - Fork 54
/
README
41 lines (27 loc) · 1.15 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# mercury_gmp_int
Multi-precision integers for Mercury based on GMP
This provides a binding to a subset of the functions from the `mpz` data-type of
[GMP](http://gmplib.org).
## Usage
To use, you'll need a compiled version of GMP, both shared and static libraries
should work.
Compile your program and link to the library:
```
$ mmc -l gmp $OPTIONS $PROGRAM_NAME
```
or as follows if you want to use static linking (slightly faster):
```
$ mmc --link-object $FULL_PATH_TO_STATIC_GMP_LIB $OPTIONS $PROGRAM_NAME
```
## Benchmark
For heavy number crunching code on bignums, first benchmarks show that
Mercury-GMP is 2.15 -- 2.4x faster than SWI and 1.2 -- 1.3x faster than YAP
(both using GMP) and around 1.35x -- 1.15x slower than Haskell (depending on
dynamic or static linking).
For a Miller-Rabin test, Mercury-GMP was more than two orders of magnitude
faster than using `integer.m` from the standard library. It is between 2 to 6
times faster than Mercury-MP which is based on [libtommath](http://libtom.net).
## Remarks
This only works in the C grades (hlc / asm_fast) with conservative garbage
collection.
Currently, there is basically no error checking.