gmp 0.4.1-x86-mingw32 → 0.4.3-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,6 +1,20 @@
1
+ 0.4.3:
2
+ * Support for MPFR on Windows introduced. gmp-x86-mswin32 gem should be used.
3
+ * Removed compilation warnings when using MPFR
4
+ * Added constants GMP::GMP_CC, GMP::GMP_CFLAGS, and GMP::GMP_BITS_PER_LIMB.
5
+ * Added constant GMP::MPFR_VERSION.
6
+ * Added MPFR rounding constants. These will be changed soon though.
7
+ * Added MPFR tests adapted straight from the MPFR library, just tsqrt so far.
8
+ * Added 3x MPFR functions: sec(), csc(), cot().
9
+ * Added function existence tests from
10
+ * Unit test results: 78 tests, 1025 assertions, 0 failures, 0 errors
11
+ * Unit test results: 72 tests, 593 assertions, 0 failures, 0 errors (w/o MPFR)
12
+
1
13
  0.4.1:
2
14
  * Fixed some gem dates
15
+ * Fixed gmp.so in x86-mswin32 gem
3
16
  * Added urandomm(), documentation, and tests.
17
+ * Unit test results: 70 tests, 577 assertions, 0 failures, 0 errors
4
18
 
5
19
  0.4.0:
6
20
  * Support for Windows introduced. gmp-x86-mswin32 gem should be used.
data/README.rdoc CHANGED
@@ -63,7 +63,8 @@ by me: gmp gem 0.4.0 on:
63
63
  | | (MRI) Ruby 1.9.1 | |
64
64
  +-------------------------------------+-------------------+-----------+
65
65
 
66
- <b>Note:</b> To get this running on Mac OS X (32-bit), I compiled GMP 4.3.1 with:
66
+ <b>Note:</b> To get this running on Mac OS X (32-bit), I compiled GMP 4.3.1
67
+ with:
67
68
  ./configure ABI=32 --disable-dependency-tracking
68
69
 
69
70
  =Authors
@@ -71,9 +72,25 @@ by me: gmp gem 0.4.0 on:
71
72
  * Tomasz Wegrzanowski
72
73
  * srawlins
73
74
 
75
+ =Constants
76
+
77
+ The GMP module includes the following constants. Mathematical constants, such
78
+ as pi, are defined under class methods of GMP::F, listed below.
79
+
80
+ GMP::GMP_VERSION #=> A string like "5.0.1"
81
+ GMP::GMP_CC #=> The compiler used to compile GMP
82
+ GMP::GMP_CFLAGS #=> The CFLAGS used to compile GMP
83
+ GMP::GMP_BITS_PER_LIMB #=> The number of bits per limb
84
+ (if MPFR is available)
85
+ GMP::MPFR_VERSION #=> A string like "2.4.2"
86
+ GMP::GMP_RNDN #=> The constant representing "round to nearest"
87
+ GMP::GMP_RNDZ #=> The constant representing "round toward zero"
88
+ GMP::GMP_RNDU #=> The constant representing "round toward plus infinity"
89
+ GMP::GMP_RNDD #=> The constant representing "round toward minus infinity"
90
+
74
91
  =Classes
75
92
 
76
- The module GMP is provided with following classes:
93
+ The GMP module is provided with following classes:
77
94
  * GMP::Z - infinite precision integer numbers
78
95
  * GMP::Q - infinite precision rational numbers
79
96
  * GMP::F - arbitrary precision floating point numbers
@@ -190,19 +207,39 @@ You can also call them as:
190
207
  prec get precision
191
208
  floor,ceil,trunc nearest integer, GMP::F is returned, not GMP::Z
192
209
  floor!,ceil!,trunc! in-place nearest integer
193
- GMP::F (only if MPFR is available)
194
- exp e^object
195
- expm1 the same as (object.exp) - 1, with better
196
- precision
210
+ GMP::RandState
211
+ seed(integer) seed the generator with a Fixnum or GMP::Z
212
+ urandomb(fixnum) get uniformly distributed random number between 0
213
+ and 2^fixnum-1, inclusive
214
+ urandomm(integer) get uniformly distributed random number between 0
215
+ and integer-1, inclusive
216
+ GMP (timing functions for GMPbench (0.2))
217
+ cputime milliseconds of cpu time since Ruby start
218
+ time times the execution of a block
219
+
220
+ *only if MPFR is available*
221
+ class methods of GMP::F
222
+ const_log2 returns the natural log of 2
223
+ const_pi returns pi
224
+ const_euler returns euler
225
+ const_catalan returns catalan
226
+ GMP::F
227
+ sqrt square root of the object
228
+ ** power
197
229
  log natural logarithm of object
198
230
  log2 binary logarithm of object
199
231
  log10 decimal logarithm of object
232
+ exp e^object
200
233
  log1p the same as (object + 1).log, with better
201
234
  precision
202
- sqrt square root of the object
235
+ expm1 the same as (object.exp) - 1, with better
236
+ precision
203
237
  cos \
204
238
  sin |
205
239
  tan |
240
+ sec |
241
+ csc |
242
+ cot |
206
243
  acos |
207
244
  asin |
208
245
  atan | trigonometric functions
@@ -216,14 +253,9 @@ You can also call them as:
216
253
  infinite? | type of floating point number
217
254
  finite? |
218
255
  number? /
219
- ** power
220
256
  GMP::RandState
221
- seed(integer) seed the generator with a Fixnum or GMP::Z
222
- urandomb(fixnum) get uniformly distributed random number between 0
223
- and 2^fixnum-1, inclusive
224
- GMP (timing functions for GMPbench (0.2))
225
- cputime milliseconds of cpu time since Ruby start
226
- time times the execution of a block
257
+ mpfr_urandomb(fixnum) get uniformly distributed random floating-point
258
+ number within 0 <= rop < 1
227
259
 
228
260
 
229
261
  =Testing
@@ -251,8 +283,9 @@ If there is no explicit precision, highest precision of all GMP::F arguments is
251
283
  used. That doesn't ensure that result will be exact. For details, consult any
252
284
  paper about floating point arithmetics.
253
285
 
254
- Default precision can be explicitely set by passing 0 to GMP::F.new(). In
255
- particular, you can set precision of copy of GMP::F object by:
286
+ Default precision can be explicitely set by passing 0 as the second argument
287
+ for to GMP::F.new(). In particular, you can set precision of copy of GMP::F
288
+ object by:
256
289
  new_obj = GMP::F.new(old_obj, 0)
257
290
 
258
291
  Precision argument, and default_precision will be rounded up to whatever GMP
@@ -331,7 +364,6 @@ These are inherited from Tomasz. I will go through these and see which are
331
364
  still relevant.
332
365
 
333
366
  * mpz_fits_* and 31 vs. 32 integer variables
334
- * all appropriate module and class methods if there are any to add
335
367
  * fix all sign issues (don't know what these are)
336
368
  * floats with precision control
337
369
  * to_s vs. inspect
@@ -1,165 +1,165 @@
1
- #! /usr/bin/env ruby
2
-
3
- # Copyright 2003 Free Software Foundation, Inc.
4
-
5
- # This file is part of the GNU GMPbench.
6
-
7
- # This program is free software; you can redistribute it and/or modify it under
8
- # the terms of the GNU General Public License as published by the Free Software
9
- # Foundation; either version 2 of the License, or (at your option) any later
10
- # version.
11
-
12
- # This program is distributed in the hope that it will be useful, but WITHOUT
13
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14
- # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
15
- # details.
16
-
17
- # You should have received a copy of the GNU General Public License along with
18
- # this program; if not, write to the Free Software Foundation, Inc., 59 Temple
19
- # Place - Suite 330, Boston, MA 02111-1307, USA.
20
-
21
- class String
22
- def bs
23
- gsub("/", "\\")
24
- end
25
-
26
- def sh_interpolate
27
- gsub(/\$([A-Z]+)/) { |s| ENV[$1] }
28
- end
29
- end
30
-
31
- puts "***** GMPbench version 0.2 *****"
32
-
33
- no_compile = false
34
- default = false
35
- gnu_bin = "/cygwin/bin/"
36
- gnu_bin = "/Ruby19/devkit/msys/1.0.11/bin/"
37
-
38
- while ARGV[0] =~ /^-/
39
- case ARGV[0]
40
- when "-g" then gnu_bin = ARGV[1]; ARGV.shift; ARGV.shift
41
- when "-n" then no_compile = true; ARGV.shift
42
- else ARGV.shift
43
- end
44
- end
45
-
46
- if RUBY_VERSION =~ /mingw/ and !( ENV["PATH"] =~ /;\.$|^\.;|;\.;/ )
47
- ENV["PATH"] += ";."
48
- end
49
-
50
- if no_compile
51
- puts "Suppressing compilation"
52
- else
53
- unless ENV["CFLAGS"]
54
- ENV["CFLAGS"] = "-O3 -fomit-frame-pointer"
55
- puts "Using default CFLAGS = \"$CFLAGS\"".sh_interpolate
56
- default = true
57
- else
58
- puts "Using CFLAGS = \"$CFLAGS\" from your environment".sh_interpolate
59
- end
60
- unless ENV["CC"]
61
- ENV["CC"] = "gcc"
62
- puts "Using default CC = \"$CC\"".sh_interpolate
63
- default = true
64
- else
65
- puts "Using CC = \"$CC\" from your environment".sh_interpolate
66
- end
67
- unless ENV["LIBS"]
68
- ENV["LIBS"] = "-static -lgmp"
69
- puts "Using default LIBS = \"$LIBS\"".sh_interpolate
70
- default = true
71
- else
72
- puts "Using LIBS = \"$LIBS\" from your environment".sh_interpolate
73
- end
74
-
75
- puts "Using compilation command: $CC $CFLAGS foo.c -o foo $LIBS".sh_interpolate
76
- if default
77
- puts "You may want to override CC, CFLAGS, and LIBS"
78
- end
79
-
80
- `#{"$CC $CFLAGS gmpver.c $LIBS".sh_interpolate}`
81
- puts "Using `./a.out`"
82
-
83
- puts "Compiling benchmarks"
84
- `#{"$CC $CFLAGS gcd.c -o gcd $LIBS".sh_interpolate}`
85
- `#{"$CC $CFLAGS gcdext.c -o gcdext $LIBS".sh_interpolate}`
86
- `#{"$CC $CFLAGS multiply.c -o multiply $LIBS".sh_interpolate}`
87
- `#{"$CC $CFLAGS divide.c -o divide $LIBS".sh_interpolate}`
88
- `#{"$CC $CFLAGS rsa.c -o rsa $LIBS".sh_interpolate}`
89
- `#{"$CC $CFLAGS pi.c -o pi $LIBS -lm".sh_interpolate}`
90
- end
91
-
92
- multiply_args = "128 512 8192 131072 2097152 128,128 512,512 8192,8192 " +
93
- "131072,131072 2097152,2097152 15000,10000 20000,10000 " +
94
- "30000,10000 16777216,512 16777216,262144"
95
- multiply_weight = 1
96
-
97
- divide_args = "8192,32 8192,64 8192,128 8192,4096 131072,65536 " +
98
- "8388608,4194304 8192,8064 16777216,262144"
99
- divide_weight = 1
100
-
101
- gcd_args = "128,128 512,512 8192,8192 131072,131072 1048576,1048576"
102
- gcd_weight = 0.5
103
-
104
- gcdext_args = "128,128 512,512 8192,8192 131072,131072 1048576,1048576"
105
- gcdext_weight = 0.5
106
-
107
- rsa_args = "512 1024 2048"
108
- rsa_weight = 1
109
-
110
- pi_args = "10000 100000 1000000"
111
- pi_weight = 1
112
-
113
- #base_tests = "multiply divide gcd gcdext"
114
- base_tests = "multiply divide gcd"
115
- #app_tests = "rsa pi"
116
- app_tests = "rsa"
117
-
118
- tests = "base app"
119
-
120
- puts "Running benchmarks (propagated score accuracy exceeds printed intermediates)"
121
-
122
- acc2 = 1
123
- n2 = 0
124
- tests.split(" ").each do |cat|
125
- puts " Category #{cat}"
126
- tests = eval "#{cat}_tests"
127
-
128
- acc1 = 1
129
- n1 = 0
130
- tests.split(" ").each do |t|
131
- weight = eval "#{t}_weight"
132
- puts " Program #{t} (weight=#{weight})"
133
- args = eval "#{t}_args"
134
-
135
- acc = 1
136
- n = 0
137
- args.split(" ").each do |a|
138
- ta = `echo #{a} | #{gnu_bin}sed 's;,; ;g'`.chomp
139
- printf ' %-48s', "GMPbench.#{cat}.#{t}(#{a})"
140
- `ruby #{t} #{ta} > "RES-#{t}-#{a}"`
141
- sed_cmd = "#{gnu_bin}sed 's;^RESULT: \\([0-9.]*\\).*$;\\1;'"
142
- res_cmd = "#{gnu_bin}grep \"^RESULT\" RES-#{t}-#{a} | #{sed_cmd}"
143
- res = `#{res_cmd}`
144
- printf "%12s\n", `gexpr -prec 4 "#{res}"`.chomp
145
- acc = `gexpr -prec 10 "#{acc} * #{res}"`
146
- n = `gexpr #{n}+1`
147
- end
148
-
149
- out = `gexpr -prec 10 "#{acc}^(1/#{n})"`
150
- printf " %-40s%12s\n", "GMPbench.#{cat}.#{t}", `gexpr -prec 5 "#{out}"`
151
- acc1 = `gexpr -prec 10 "#{acc1} * #{out}^#{weight}"`
152
- n1 = `gexpr #{n1}+#{weight}`
153
- end
154
-
155
- out = `gexpr -prec 10 "#{acc1}^(1/#{n1})"`
156
- printf " %-32s%12s\n", "GMPbench.#{cat}", `gexpr -prec 5 "#{out}"`
157
- acc2 = `gexpr -prec 10 "#{acc2} * #{out}"`
158
- n2 = `gexpr #{n2}+1`
159
- end
160
-
161
-
162
- out = `gexpr "#{acc2}^(1/#{n2})"`
163
- puts "GMPbench: #{out}"
164
-
165
- exit 0
1
+ #! /usr/bin/env ruby
2
+
3
+ # Copyright 2003 Free Software Foundation, Inc.
4
+
5
+ # This file is part of the GNU GMPbench.
6
+
7
+ # This program is free software; you can redistribute it and/or modify it under
8
+ # the terms of the GNU General Public License as published by the Free Software
9
+ # Foundation; either version 2 of the License, or (at your option) any later
10
+ # version.
11
+
12
+ # This program is distributed in the hope that it will be useful, but WITHOUT
13
+ # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14
+ # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
15
+ # details.
16
+
17
+ # You should have received a copy of the GNU General Public License along with
18
+ # this program; if not, write to the Free Software Foundation, Inc., 59 Temple
19
+ # Place - Suite 330, Boston, MA 02111-1307, USA.
20
+
21
+ class String
22
+ def bs
23
+ gsub("/", "\\")
24
+ end
25
+
26
+ def sh_interpolate
27
+ gsub(/\$([A-Z]+)/) { |s| ENV[$1] }
28
+ end
29
+ end
30
+
31
+ puts "***** GMPbench version 0.2 *****"
32
+
33
+ no_compile = false
34
+ default = false
35
+ gnu_bin = "/cygwin/bin/"
36
+ gnu_bin = "/Ruby19/devkit/msys/1.0.11/bin/"
37
+
38
+ while ARGV[0] =~ /^-/
39
+ case ARGV[0]
40
+ when "-g" then gnu_bin = ARGV[1]; ARGV.shift; ARGV.shift
41
+ when "-n" then no_compile = true; ARGV.shift
42
+ else ARGV.shift
43
+ end
44
+ end
45
+
46
+ if RUBY_VERSION =~ /mingw/ and !( ENV["PATH"] =~ /;\.$|^\.;|;\.;/ )
47
+ ENV["PATH"] += ";."
48
+ end
49
+
50
+ if no_compile
51
+ puts "Suppressing compilation"
52
+ else
53
+ unless ENV["CFLAGS"]
54
+ ENV["CFLAGS"] = "-O3 -fomit-frame-pointer"
55
+ puts "Using default CFLAGS = \"$CFLAGS\"".sh_interpolate
56
+ default = true
57
+ else
58
+ puts "Using CFLAGS = \"$CFLAGS\" from your environment".sh_interpolate
59
+ end
60
+ unless ENV["CC"]
61
+ ENV["CC"] = "gcc"
62
+ puts "Using default CC = \"$CC\"".sh_interpolate
63
+ default = true
64
+ else
65
+ puts "Using CC = \"$CC\" from your environment".sh_interpolate
66
+ end
67
+ unless ENV["LIBS"]
68
+ ENV["LIBS"] = "-static -lgmp"
69
+ puts "Using default LIBS = \"$LIBS\"".sh_interpolate
70
+ default = true
71
+ else
72
+ puts "Using LIBS = \"$LIBS\" from your environment".sh_interpolate
73
+ end
74
+
75
+ puts "Using compilation command: $CC $CFLAGS foo.c -o foo $LIBS".sh_interpolate
76
+ if default
77
+ puts "You may want to override CC, CFLAGS, and LIBS"
78
+ end
79
+
80
+ `#{"$CC $CFLAGS gmpver.c $LIBS".sh_interpolate}`
81
+ puts "Using `./a.out`"
82
+
83
+ puts "Compiling benchmarks"
84
+ `#{"$CC $CFLAGS gcd.c -o gcd $LIBS".sh_interpolate}`
85
+ `#{"$CC $CFLAGS gcdext.c -o gcdext $LIBS".sh_interpolate}`
86
+ `#{"$CC $CFLAGS multiply.c -o multiply $LIBS".sh_interpolate}`
87
+ `#{"$CC $CFLAGS divide.c -o divide $LIBS".sh_interpolate}`
88
+ `#{"$CC $CFLAGS rsa.c -o rsa $LIBS".sh_interpolate}`
89
+ `#{"$CC $CFLAGS pi.c -o pi $LIBS -lm".sh_interpolate}`
90
+ end
91
+
92
+ multiply_args = "128 512 8192 131072 2097152 128,128 512,512 8192,8192 " +
93
+ "131072,131072 2097152,2097152 15000,10000 20000,10000 " +
94
+ "30000,10000 16777216,512 16777216,262144"
95
+ multiply_weight = 1
96
+
97
+ divide_args = "8192,32 8192,64 8192,128 8192,4096 131072,65536 " +
98
+ "8388608,4194304 8192,8064 16777216,262144"
99
+ divide_weight = 1
100
+
101
+ gcd_args = "128,128 512,512 8192,8192 131072,131072 1048576,1048576"
102
+ gcd_weight = 0.5
103
+
104
+ gcdext_args = "128,128 512,512 8192,8192 131072,131072 1048576,1048576"
105
+ gcdext_weight = 0.5
106
+
107
+ rsa_args = "512 1024 2048"
108
+ rsa_weight = 1
109
+
110
+ pi_args = "10000 100000 1000000"
111
+ pi_weight = 1
112
+
113
+ #base_tests = "multiply divide gcd gcdext"
114
+ base_tests = "multiply divide gcd"
115
+ #app_tests = "rsa pi"
116
+ app_tests = "rsa"
117
+
118
+ tests = "base app"
119
+
120
+ puts "Running benchmarks (propagated score accuracy exceeds printed intermediates)"
121
+
122
+ acc2 = 1
123
+ n2 = 0
124
+ tests.split(" ").each do |cat|
125
+ puts " Category #{cat}"
126
+ tests = eval "#{cat}_tests"
127
+
128
+ acc1 = 1
129
+ n1 = 0
130
+ tests.split(" ").each do |t|
131
+ weight = eval "#{t}_weight"
132
+ puts " Program #{t} (weight=#{weight})"
133
+ args = eval "#{t}_args"
134
+
135
+ acc = 1
136
+ n = 0
137
+ args.split(" ").each do |a|
138
+ ta = `echo #{a} | #{gnu_bin}sed 's;,; ;g'`.chomp
139
+ printf ' %-48s', "GMPbench.#{cat}.#{t}(#{a})"
140
+ `ruby #{t} #{ta} > "RES-#{t}-#{a}"`
141
+ sed_cmd = "#{gnu_bin}sed 's;^RESULT: \\([0-9.]*\\).*$;\\1;'"
142
+ res_cmd = "#{gnu_bin}grep \"^RESULT\" RES-#{t}-#{a} | #{sed_cmd}"
143
+ res = `#{res_cmd}`
144
+ printf "%12s\n", `gexpr -prec 4 "#{res}"`.chomp
145
+ acc = `gexpr -prec 10 "#{acc} * #{res}"`
146
+ n = `gexpr #{n}+1`
147
+ end
148
+
149
+ out = `gexpr -prec 10 "#{acc}^(1/#{n})"`
150
+ printf " %-40s%12s\n", "GMPbench.#{cat}.#{t}", `gexpr -prec 5 "#{out}"`
151
+ acc1 = `gexpr -prec 10 "#{acc1} * #{out}^#{weight}"`
152
+ n1 = `gexpr #{n1}+#{weight}`
153
+ end
154
+
155
+ out = `gexpr -prec 10 "#{acc1}^(1/#{n1})"`
156
+ printf " %-32s%12s\n", "GMPbench.#{cat}", `gexpr -prec 5 "#{out}"`
157
+ acc2 = `gexpr -prec 10 "#{acc2} * #{out}"`
158
+ n2 = `gexpr #{n2}+1`
159
+ end
160
+
161
+
162
+ out = `gexpr "#{acc2}^(1/#{n2})"`
163
+ puts "GMPbench: #{out}"
164
+
165
+ exit 0