crmf 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +12 -0
- data/crmf.gemspec +102 -1
- data/ext/crlibm-1.0beta5/AUTHORS +2 -0
- data/ext/crlibm-1.0beta5/CMakeLists.txt +154 -0
- data/ext/crlibm-1.0beta5/COPYING +340 -0
- data/ext/crlibm-1.0beta5/COPYING.LIB +504 -0
- data/ext/crlibm-1.0beta5/ChangeLog +125 -0
- data/ext/crlibm-1.0beta5/Makefile.am +134 -0
- data/ext/crlibm-1.0beta5/NEWS +0 -0
- data/ext/crlibm-1.0beta5/README +31 -0
- data/ext/crlibm-1.0beta5/README.DEV +23 -0
- data/ext/crlibm-1.0beta5/README.md +5 -0
- data/ext/crlibm-1.0beta5/TODO +66 -0
- data/ext/crlibm-1.0beta5/VERSION +1 -0
- data/ext/crlibm-1.0beta5/acos-td.c +1195 -0
- data/ext/crlibm-1.0beta5/acos-td.h +629 -0
- data/ext/crlibm-1.0beta5/asin-td.c +1297 -0
- data/ext/crlibm-1.0beta5/asin-td.h +620 -0
- data/ext/crlibm-1.0beta5/asincos.c +4488 -0
- data/ext/crlibm-1.0beta5/asincos.h +575 -0
- data/ext/crlibm-1.0beta5/atan-itanium.c +846 -0
- data/ext/crlibm-1.0beta5/atan-pentium.c +280 -0
- data/ext/crlibm-1.0beta5/atan-pentium.h +343 -0
- data/ext/crlibm-1.0beta5/atan_accurate.c +341 -0
- data/ext/crlibm-1.0beta5/atan_accurate.h +198 -0
- data/ext/crlibm-1.0beta5/atan_fast.c +506 -0
- data/ext/crlibm-1.0beta5/atan_fast.h +680 -0
- data/ext/crlibm-1.0beta5/configure.ac +419 -0
- data/ext/crlibm-1.0beta5/crlibm.h +204 -0
- data/ext/crlibm-1.0beta5/crlibm.spec +42 -0
- data/ext/crlibm-1.0beta5/crlibm_private.c +397 -0
- data/ext/crlibm-1.0beta5/crlibm_private.h +1048 -0
- data/ext/crlibm-1.0beta5/csh_fast.c +721 -0
- data/ext/crlibm-1.0beta5/csh_fast.h +771 -0
- data/ext/crlibm-1.0beta5/double-extended.h +496 -0
- data/ext/crlibm-1.0beta5/exp-itanium.c +723 -0
- data/ext/crlibm-1.0beta5/exp-td-standalone.c +87 -0
- data/ext/crlibm-1.0beta5/exp-td.c +1363 -0
- data/ext/crlibm-1.0beta5/exp-td.h +685 -0
- data/ext/crlibm-1.0beta5/exp_build_coeffs/exp_fast_table.c +125 -0
- data/ext/crlibm-1.0beta5/expm1-standalone.c +119 -0
- data/ext/crlibm-1.0beta5/expm1.c +2515 -0
- data/ext/crlibm-1.0beta5/expm1.h +715 -0
- data/ext/crlibm-1.0beta5/interval.h +238 -0
- data/ext/crlibm-1.0beta5/log-de.c +480 -0
- data/ext/crlibm-1.0beta5/log-de.h +747 -0
- data/ext/crlibm-1.0beta5/log-de2.c +280 -0
- data/ext/crlibm-1.0beta5/log-de2.h +2352 -0
- data/ext/crlibm-1.0beta5/log-td.c +1158 -0
- data/ext/crlibm-1.0beta5/log-td.h +819 -0
- data/ext/crlibm-1.0beta5/log.c +2244 -0
- data/ext/crlibm-1.0beta5/log.h +1592 -0
- data/ext/crlibm-1.0beta5/log10-td.c +906 -0
- data/ext/crlibm-1.0beta5/log10-td.h +823 -0
- data/ext/crlibm-1.0beta5/log1p.c +1295 -0
- data/ext/crlibm-1.0beta5/log2-td.c +1521 -0
- data/ext/crlibm-1.0beta5/log2-td.h +821 -0
- data/ext/crlibm-1.0beta5/log2_accurate.c +330 -0
- data/ext/crlibm-1.0beta5/log2_accurate.h +261 -0
- data/ext/crlibm-1.0beta5/log_accurate.c +133 -0
- data/ext/crlibm-1.0beta5/log_accurate.h +261 -0
- data/ext/crlibm-1.0beta5/log_fast.c +360 -0
- data/ext/crlibm-1.0beta5/log_fast.h +440 -0
- data/ext/crlibm-1.0beta5/pow.c +1396 -0
- data/ext/crlibm-1.0beta5/pow.h +3101 -0
- data/ext/crlibm-1.0beta5/prepare +20 -0
- data/ext/crlibm-1.0beta5/rem_pio2_accurate.c +219 -0
- data/ext/crlibm-1.0beta5/rem_pio2_accurate.h +53 -0
- data/ext/crlibm-1.0beta5/scs_lib/AUTHORS +3 -0
- data/ext/crlibm-1.0beta5/scs_lib/COPYING +504 -0
- data/ext/crlibm-1.0beta5/scs_lib/ChangeLog +16 -0
- data/ext/crlibm-1.0beta5/scs_lib/Doxyfile.dev +939 -0
- data/ext/crlibm-1.0beta5/scs_lib/Doxyfile.user +939 -0
- data/ext/crlibm-1.0beta5/scs_lib/INSTALL +215 -0
- data/ext/crlibm-1.0beta5/scs_lib/Makefile.am +17 -0
- data/ext/crlibm-1.0beta5/scs_lib/NEWS +0 -0
- data/ext/crlibm-1.0beta5/scs_lib/README +9 -0
- data/ext/crlibm-1.0beta5/scs_lib/README.DEV +38 -0
- data/ext/crlibm-1.0beta5/scs_lib/TODO +4 -0
- data/ext/crlibm-1.0beta5/scs_lib/VERSION +1 -0
- data/ext/crlibm-1.0beta5/scs_lib/addition_scs.c +623 -0
- data/ext/crlibm-1.0beta5/scs_lib/division_scs.c +110 -0
- data/ext/crlibm-1.0beta5/scs_lib/double2scs.c +174 -0
- data/ext/crlibm-1.0beta5/scs_lib/main.dox +104 -0
- data/ext/crlibm-1.0beta5/scs_lib/multiplication_scs.c +339 -0
- data/ext/crlibm-1.0beta5/scs_lib/poly_fct.c +112 -0
- data/ext/crlibm-1.0beta5/scs_lib/print_scs.c +73 -0
- data/ext/crlibm-1.0beta5/scs_lib/rand_scs.c +63 -0
- data/ext/crlibm-1.0beta5/scs_lib/scs.h +353 -0
- data/ext/crlibm-1.0beta5/scs_lib/scs2double.c +411 -0
- data/ext/crlibm-1.0beta5/scs_lib/scs2mpf.c +58 -0
- data/ext/crlibm-1.0beta5/scs_lib/scs2mpfr.c +61 -0
- data/ext/crlibm-1.0beta5/scs_lib/scs_private.c +23 -0
- data/ext/crlibm-1.0beta5/scs_lib/scs_private.h +133 -0
- data/ext/crlibm-1.0beta5/scs_lib/wrapper_scs.h +486 -0
- data/ext/crlibm-1.0beta5/scs_lib/zero_scs.c +52 -0
- data/ext/crlibm-1.0beta5/trigo_accurate.c +501 -0
- data/ext/crlibm-1.0beta5/trigo_accurate.h +331 -0
- data/ext/crlibm-1.0beta5/trigo_fast.c +1243 -0
- data/ext/crlibm-1.0beta5/trigo_fast.h +639 -0
- data/ext/crlibm-1.0beta5/trigpi.c +1169 -0
- data/ext/crlibm-1.0beta5/trigpi.h +556 -0
- data/ext/crlibm-1.0beta5/triple-double.c +57 -0
- data/ext/crlibm-1.0beta5/triple-double.h +1380 -0
- data/ext/crmf/crmf.c +16 -16
- data/ext/crmf/extconf.rb +12 -8
- data/lib/crmf/version.rb +1 -1
- data/tests/perf.rb +100 -219
- metadata +104 -3
- data/ext/crlibm-1.0beta4.tar.gz +0 -0
data/ext/crmf/crmf.c
CHANGED
@@ -1581,7 +1581,7 @@ static VALUE crmf_add_rz(VALUE self, VALUE x, VALUE y)
|
|
1581
1581
|
double dx = NUM2DBL(x);
|
1582
1582
|
double dy = NUM2DBL(y);
|
1583
1583
|
fesetround(FE_TOWARDZERO);
|
1584
|
-
double dr = dx + dy;
|
1584
|
+
volatile double dr = dx + dy;
|
1585
1585
|
fesetround(FE_TONEAREST);
|
1586
1586
|
return DBL2NUM(dr);
|
1587
1587
|
}
|
@@ -1591,7 +1591,7 @@ static VALUE crmf_add_rd(VALUE self, VALUE x, VALUE y)
|
|
1591
1591
|
double dx = NUM2DBL(x);
|
1592
1592
|
double dy = NUM2DBL(y);
|
1593
1593
|
fesetround(FE_DOWNWARD);
|
1594
|
-
double dr = dx + dy;
|
1594
|
+
volatile double dr = dx + dy;
|
1595
1595
|
fesetround(FE_TONEAREST);
|
1596
1596
|
return DBL2NUM(dr);
|
1597
1597
|
}
|
@@ -1601,7 +1601,7 @@ static VALUE crmf_add_ru(VALUE self, VALUE x, VALUE y)
|
|
1601
1601
|
double dx = NUM2DBL(x);
|
1602
1602
|
double dy = NUM2DBL(y);
|
1603
1603
|
fesetround(FE_UPWARD);
|
1604
|
-
double dr = dx + dy;
|
1604
|
+
volatile double dr = dx + dy;
|
1605
1605
|
fesetround(FE_TONEAREST);
|
1606
1606
|
return DBL2NUM(dr);
|
1607
1607
|
}
|
@@ -1611,7 +1611,7 @@ static VALUE crmf_add_rn(VALUE self, VALUE x, VALUE y)
|
|
1611
1611
|
double dx = NUM2DBL(x);
|
1612
1612
|
double dy = NUM2DBL(y);
|
1613
1613
|
fesetround(FE_TONEAREST);
|
1614
|
-
double dr = dx + dy;
|
1614
|
+
volatile double dr = dx + dy;
|
1615
1615
|
return DBL2NUM(dr);
|
1616
1616
|
}
|
1617
1617
|
|
@@ -1621,7 +1621,7 @@ static VALUE crmf_sub_rz(VALUE self, VALUE x, VALUE y)
|
|
1621
1621
|
double dx = NUM2DBL(x);
|
1622
1622
|
double dy = NUM2DBL(y);
|
1623
1623
|
fesetround(FE_TOWARDZERO);
|
1624
|
-
double dr = dx - dy;
|
1624
|
+
volatile double dr = dx - dy;
|
1625
1625
|
fesetround(FE_TONEAREST);
|
1626
1626
|
return DBL2NUM(dr);
|
1627
1627
|
}
|
@@ -1631,7 +1631,7 @@ static VALUE crmf_sub_rd(VALUE self, VALUE x, VALUE y)
|
|
1631
1631
|
double dx = NUM2DBL(x);
|
1632
1632
|
double dy = NUM2DBL(y);
|
1633
1633
|
fesetround(FE_DOWNWARD);
|
1634
|
-
double dr = dx - dy;
|
1634
|
+
volatile double dr = dx - dy;
|
1635
1635
|
fesetround(FE_TONEAREST);
|
1636
1636
|
return DBL2NUM(dr);
|
1637
1637
|
}
|
@@ -1641,7 +1641,7 @@ static VALUE crmf_sub_ru(VALUE self, VALUE x, VALUE y)
|
|
1641
1641
|
double dx = NUM2DBL(x);
|
1642
1642
|
double dy = NUM2DBL(y);
|
1643
1643
|
fesetround(FE_UPWARD);
|
1644
|
-
double dr = dx - dy;
|
1644
|
+
volatile double dr = dx - dy;
|
1645
1645
|
fesetround(FE_TONEAREST);
|
1646
1646
|
return DBL2NUM(dr);
|
1647
1647
|
}
|
@@ -1651,7 +1651,7 @@ static VALUE crmf_sub_rn(VALUE self, VALUE x, VALUE y)
|
|
1651
1651
|
double dx = NUM2DBL(x);
|
1652
1652
|
double dy = NUM2DBL(y);
|
1653
1653
|
fesetround(FE_TONEAREST);
|
1654
|
-
double dr = dx - dy;
|
1654
|
+
volatile double dr = dx - dy;
|
1655
1655
|
return DBL2NUM(dr);
|
1656
1656
|
}
|
1657
1657
|
|
@@ -1661,7 +1661,7 @@ static VALUE crmf_mul_rz(VALUE self, VALUE x, VALUE y)
|
|
1661
1661
|
double dx = NUM2DBL(x);
|
1662
1662
|
double dy = NUM2DBL(y);
|
1663
1663
|
fesetround(FE_TOWARDZERO);
|
1664
|
-
double dr = dx * dy;
|
1664
|
+
volatile double dr = dx * dy;
|
1665
1665
|
fesetround(FE_TONEAREST);
|
1666
1666
|
return DBL2NUM(dr);
|
1667
1667
|
}
|
@@ -1671,7 +1671,7 @@ static VALUE crmf_mul_rd(VALUE self, VALUE x, VALUE y)
|
|
1671
1671
|
double dx = NUM2DBL(x);
|
1672
1672
|
double dy = NUM2DBL(y);
|
1673
1673
|
fesetround(FE_DOWNWARD);
|
1674
|
-
double dr = dx * dy;
|
1674
|
+
volatile double dr = dx * dy;
|
1675
1675
|
fesetround(FE_TONEAREST);
|
1676
1676
|
return DBL2NUM(dr);
|
1677
1677
|
}
|
@@ -1681,7 +1681,7 @@ static VALUE crmf_mul_ru(VALUE self, VALUE x, VALUE y)
|
|
1681
1681
|
double dx = NUM2DBL(x);
|
1682
1682
|
double dy = NUM2DBL(y);
|
1683
1683
|
fesetround(FE_UPWARD);
|
1684
|
-
double dr = dx * dy;
|
1684
|
+
volatile double dr = dx * dy;
|
1685
1685
|
fesetround(FE_TONEAREST);
|
1686
1686
|
return DBL2NUM(dr);
|
1687
1687
|
}
|
@@ -1691,7 +1691,7 @@ static VALUE crmf_mul_rn(VALUE self, VALUE x, VALUE y)
|
|
1691
1691
|
double dx = NUM2DBL(x);
|
1692
1692
|
double dy = NUM2DBL(y);
|
1693
1693
|
fesetround(FE_TONEAREST);
|
1694
|
-
double dr = dx * dy;
|
1694
|
+
volatile double dr = dx * dy;
|
1695
1695
|
return DBL2NUM(dr);
|
1696
1696
|
}
|
1697
1697
|
|
@@ -1701,7 +1701,7 @@ static VALUE crmf_div_rz(VALUE self, VALUE x, VALUE y)
|
|
1701
1701
|
double dx = NUM2DBL(x);
|
1702
1702
|
double dy = NUM2DBL(y);
|
1703
1703
|
fesetround(FE_TOWARDZERO);
|
1704
|
-
double dr = dx / dy;
|
1704
|
+
volatile double dr = dx / dy;
|
1705
1705
|
fesetround(FE_TONEAREST);
|
1706
1706
|
return DBL2NUM(dr);
|
1707
1707
|
}
|
@@ -1711,7 +1711,7 @@ static VALUE crmf_div_rd(VALUE self, VALUE x, VALUE y)
|
|
1711
1711
|
double dx = NUM2DBL(x);
|
1712
1712
|
double dy = NUM2DBL(y);
|
1713
1713
|
fesetround(FE_DOWNWARD);
|
1714
|
-
double dr = dx / dy;
|
1714
|
+
volatile double dr = dx / dy;
|
1715
1715
|
fesetround(FE_TONEAREST);
|
1716
1716
|
return DBL2NUM(dr);
|
1717
1717
|
}
|
@@ -1721,7 +1721,7 @@ static VALUE crmf_div_ru(VALUE self, VALUE x, VALUE y)
|
|
1721
1721
|
double dx = NUM2DBL(x);
|
1722
1722
|
double dy = NUM2DBL(y);
|
1723
1723
|
fesetround(FE_UPWARD);
|
1724
|
-
double dr = dx / dy;
|
1724
|
+
volatile double dr = dx / dy;
|
1725
1725
|
fesetround(FE_TONEAREST);
|
1726
1726
|
return DBL2NUM(dr);
|
1727
1727
|
}
|
@@ -1731,7 +1731,7 @@ static VALUE crmf_div_rn(VALUE self, VALUE x, VALUE y)
|
|
1731
1731
|
double dx = NUM2DBL(x);
|
1732
1732
|
double dy = NUM2DBL(y);
|
1733
1733
|
fesetround(FE_TONEAREST);
|
1734
|
-
double dr = dx / dy;
|
1734
|
+
volatile double dr = dx / dy;
|
1735
1735
|
return DBL2NUM(dr);
|
1736
1736
|
}
|
1737
1737
|
|
data/ext/crmf/extconf.rb
CHANGED
@@ -26,24 +26,28 @@ unless have_library('mpfr') then
|
|
26
26
|
end
|
27
27
|
|
28
28
|
ext_dir = File.absolute_path(File.join('..', '..'), __FILE__)
|
29
|
-
|
30
|
-
crlibm_archive = crlibm_src + '.tar.gz'
|
29
|
+
crlibm_src_dir = File.join(ext_dir, 'crlibm-1.0beta5')
|
31
30
|
crlibm_install_dir = File.join(ext_dir, 'crlibm')
|
32
31
|
crlibm_lib_dir = File.join(crlibm_install_dir, 'lib')
|
33
32
|
crlibm_inc_dir = File.join(crlibm_install_dir, 'include')
|
34
33
|
crlibm_bin_dir = File.join(crlibm_install_dir, 'bin')
|
35
34
|
unless File.directory?(crlibm_install_dir) then
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
35
|
+
Dir.chdir(crlibm_src_dir) do
|
36
|
+
unless File.file?(File.join(crlibm_src_dir, 'configure')) then
|
37
|
+
ENV['CFLAGS'] = '-g -O2 -fPIC'
|
38
|
+
cmd = "./prepare --prefix='#{crlibm_install_dir}'#{RUBY_PLATFORM =~ /x86_64/ ? ' --enable-sse2 --enable-double-extended' : ''}"
|
39
|
+
abort "-----\n#{caller[0]}\nCannot configure CRLIBM.\nCommand: \"#{cmd}\"\n-----" unless system(cmd)
|
40
|
+
end
|
41
|
+
#cmd = "../configure --prefix='#{crlibm_install_dir}'#{RUBY_PLATFORM =~ /x86_64/ ? ' --enable-sse2 --enable-double-extended' : ''}"
|
42
|
+
#abort "-----\n#{caller[0]}\nCannot configure CRLIBM.\nCommand: \"#{cmd}\"\n-----" unless system(cmd)
|
41
43
|
cmd = "make"
|
42
44
|
abort "-----\n#{caller[0]}\nCannot make CRLIBM.\nCommand: \"#{cmd}\"\n-----" unless system(cmd)
|
43
45
|
cmd = "make -j1 install"
|
44
46
|
abort "-----\n#{caller[0]}\nCannot locally install CRLIBM.\nCommand: \"#{cmd}\"\n-----" unless system(cmd)
|
47
|
+
cmd = "make clean"
|
48
|
+
abort "-----\n#{caller[0]}\nCannot cleanup CRLIBM.\nCommand: \"#{cmd}\"\n-----" unless system(cmd)
|
45
49
|
end
|
46
|
-
cmd = "rm -rf '#{
|
50
|
+
cmd = "rm -rf '#{crlibm_bin_dir}'"
|
47
51
|
abort "-----\n#{caller[0]}\nCannot cleanup CRLIBM.\nCommand: \"#{cmd}\"\n-----" unless system(cmd)
|
48
52
|
end
|
49
53
|
dir_config('crlibm', crlibm_inc_dir, crlibm_lib_dir)
|
data/lib/crmf/version.rb
CHANGED
data/tests/perf.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require '../lib/crmf.rb'
|
3
|
+
require 'colorize'
|
3
4
|
|
4
5
|
def print_time(t)
|
5
6
|
if t >= 3600 then
|
@@ -124,231 +125,111 @@ funcs.each do |m|
|
|
124
125
|
end
|
125
126
|
puts "libm vs mpfr: #{nb_diff_libm_mpfr}/#{nb_tests} (#{nb_diff_libm_mpfr*100.0/nb_tests}%)#{estr}"
|
126
127
|
nb_diff_crlibm_mpfr = nb_tests.times.count{|i| res_crlibm[i] != res_mpfr[i]}
|
127
|
-
|
128
|
+
str = "crlibm vs mpfr: #{nb_diff_crlibm_mpfr}/#{nb_tests} (#{nb_diff_crlibm_mpfr*100.0/nb_tests}%)"
|
129
|
+
if nb_diff_crlibm_mpfr > 0 then
|
130
|
+
puts str.light_red
|
131
|
+
else
|
132
|
+
puts str
|
133
|
+
end
|
128
134
|
end
|
129
135
|
|
130
136
|
puts
|
131
137
|
|
132
138
|
nbtm1 = nb_tests - 1
|
133
139
|
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
end
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
nb_tests.times
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
end
|
227
|
-
puts "libm vs mpfr: #{nb_diff_libm_mpfr}/#{nb_tests} (#{nb_diff_libm_mpfr*100.0/nb_tests}%)#{estr}"
|
228
|
-
|
229
|
-
max_diff_pct = 0.0
|
230
|
-
nb_tests.times do |i|
|
231
|
-
next if (not(res_crlibm[i].finite?) and not(res_mpfr[i].finite?))
|
232
|
-
error_pct = 100.0 * (res_crlibm[i] - res_mpfr[i]).abs / res_mpfr[i]
|
233
|
-
max_diff_pct = [max_diff_pct, error_pct].max
|
234
|
-
end
|
235
|
-
nb_diff_crlibm_mpfr = nb_tests.times.count{|i| res_crlibm[i] != res_mpfr[i]}
|
236
|
-
if nb_diff_crlibm_mpfr > 0 then
|
237
|
-
estr = ", max error: #{max_diff_pct}%"
|
238
|
-
else
|
239
|
-
estr = ''
|
240
|
-
end
|
241
|
-
puts "crlibm vs mpfr: #{nb_diff_crlibm_mpfr}/#{nb_tests} (#{nb_diff_crlibm_mpfr*100.0/nb_tests}%)#{estr}"
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
puts " Add U ".center(80, '-')
|
246
|
-
|
247
|
-
tik = Time.now
|
248
|
-
nb_tests.times do |i|
|
249
|
-
res_libm[i] = f[i] + f[nbtm1-i]
|
250
|
-
end
|
251
|
-
tok = Time.now
|
252
|
-
t_libm = tok - tik
|
253
|
-
puts "libm: #{print_time(t_libm)} (#{print_time(t_libm / nb_tests)}/t)"
|
254
|
-
|
255
|
-
tik = Time.now
|
256
|
-
nb_tests.times do |i|
|
257
|
-
res_mpfr[i] = Float.add(f[i], f[nbtm1-i], :up)
|
258
|
-
end
|
259
|
-
tok = Time.now
|
260
|
-
t_mpfr = tok - tik
|
261
|
-
puts "mpfr: #{print_time(t_mpfr)} (#{print_time(t_mpfr / nb_tests)}/t)"
|
262
|
-
|
263
|
-
tik = Time.now
|
264
|
-
nb_tests.times do |i|
|
265
|
-
res_crlibm[i] = CRMF.add_ru(f[i], f[nbtm1-i])
|
266
|
-
end
|
267
|
-
tok = Time.now
|
268
|
-
t_crlibm = tok - tik
|
269
|
-
puts "crlibm: #{print_time(t_crlibm)} (#{print_time(t_crlibm / nb_tests)}/t)"
|
270
|
-
|
271
|
-
max_diff_pct = 0.0
|
272
|
-
nb_tests.times do |i|
|
273
|
-
next if (not(res_libm[i].finite?) and not(res_mpfr[i].finite?))
|
274
|
-
error_pct = 100.0 * (res_libm[i] - res_mpfr[i]).abs / res_mpfr[i]
|
275
|
-
max_diff_pct = [max_diff_pct, error_pct].max
|
276
|
-
end
|
277
|
-
nb_diff_libm_mpfr = nb_tests.times.count{|i| res_libm[i] != res_mpfr[i]}
|
278
|
-
if nb_diff_libm_mpfr > 0 then
|
279
|
-
estr = ", max error: #{max_diff_pct}%"
|
280
|
-
else
|
281
|
-
estr = ''
|
282
|
-
end
|
283
|
-
puts "libm vs mpfr: #{nb_diff_libm_mpfr}/#{nb_tests} (#{nb_diff_libm_mpfr*100.0/nb_tests}%)#{estr}"
|
284
|
-
|
285
|
-
max_diff_pct = 0.0
|
286
|
-
nb_tests.times do |i|
|
287
|
-
next if (not(res_crlibm[i].finite?) and not(res_mpfr[i].finite?))
|
288
|
-
error_pct = 100.0 * (res_crlibm[i] - res_mpfr[i]).abs / res_mpfr[i]
|
289
|
-
max_diff_pct = [max_diff_pct, error_pct].max
|
290
|
-
end
|
291
|
-
nb_diff_crlibm_mpfr = nb_tests.times.count{|i| res_crlibm[i] != res_mpfr[i]}
|
292
|
-
if nb_diff_crlibm_mpfr > 0 then
|
293
|
-
estr = ", max error: #{max_diff_pct}%"
|
294
|
-
else
|
295
|
-
estr = ''
|
296
|
-
end
|
297
|
-
puts "crlibm vs mpfr: #{nb_diff_crlibm_mpfr}/#{nb_tests} (#{nb_diff_crlibm_mpfr*100.0/nb_tests}%)#{estr}"
|
298
|
-
|
299
|
-
|
300
|
-
puts " Add Z ".center(80, '-')
|
301
|
-
|
302
|
-
tik = Time.now
|
303
|
-
nb_tests.times do |i|
|
304
|
-
res_libm[i] = f[i] + f[nbtm1-i]
|
305
|
-
end
|
306
|
-
tok = Time.now
|
307
|
-
t_libm = tok - tik
|
308
|
-
puts "libm: #{print_time(t_libm)} (#{print_time(t_libm / nb_tests)}/t)"
|
309
|
-
|
310
|
-
tik = Time.now
|
311
|
-
nb_tests.times do |i|
|
312
|
-
res_mpfr[i] = Float.add(f[i], f[nbtm1-i], :zero)
|
313
|
-
end
|
314
|
-
tok = Time.now
|
315
|
-
t_mpfr = tok - tik
|
316
|
-
puts "mpfr: #{print_time(t_mpfr)} (#{print_time(t_mpfr / nb_tests)}/t)"
|
317
|
-
|
318
|
-
tik = Time.now
|
319
|
-
nb_tests.times do |i|
|
320
|
-
res_crlibm[i] = CRMF.add_rz(f[i], f[nbtm1-i])
|
321
|
-
end
|
322
|
-
tok = Time.now
|
323
|
-
t_crlibm = tok - tik
|
324
|
-
puts "crlibm: #{print_time(t_crlibm)} (#{print_time(t_crlibm / nb_tests)}/t)"
|
325
|
-
|
326
|
-
max_diff_pct = 0.0
|
327
|
-
nb_tests.times do |i|
|
328
|
-
next if (not(res_libm[i].finite?) and not(res_mpfr[i].finite?))
|
329
|
-
error_pct = 100.0 * (res_libm[i] - res_mpfr[i]).abs / res_mpfr[i]
|
330
|
-
max_diff_pct = [max_diff_pct, error_pct].max
|
331
|
-
end
|
332
|
-
nb_diff_libm_mpfr = nb_tests.times.count{|i| res_libm[i] != res_mpfr[i]}
|
333
|
-
if nb_diff_libm_mpfr > 0 then
|
334
|
-
estr = ", max error: #{max_diff_pct}%"
|
335
|
-
else
|
336
|
-
estr = ''
|
337
|
-
end
|
338
|
-
puts "libm vs mpfr: #{nb_diff_libm_mpfr}/#{nb_tests} (#{nb_diff_libm_mpfr*100.0/nb_tests}%)#{estr}"
|
339
|
-
|
340
|
-
max_diff_pct = 0.0
|
341
|
-
nb_tests.times do |i|
|
342
|
-
next if (not(res_crlibm[i].finite?) and not(res_mpfr[i].finite?))
|
343
|
-
error_pct = 100.0 * (res_crlibm[i] - res_mpfr[i]).abs / res_mpfr[i]
|
344
|
-
max_diff_pct = [max_diff_pct, error_pct].max
|
345
|
-
end
|
346
|
-
nb_diff_crlibm_mpfr = nb_tests.times.count{|i| res_crlibm[i] != res_mpfr[i]}
|
347
|
-
if nb_diff_crlibm_mpfr > 0 then
|
348
|
-
estr = ", max error: #{max_diff_pct}%"
|
349
|
-
else
|
350
|
-
estr = ''
|
140
|
+
[
|
141
|
+
[:add, :+],
|
142
|
+
[:sub, :-],
|
143
|
+
[:mul, :*],
|
144
|
+
[:div, :/]
|
145
|
+
].each do |m_m|
|
146
|
+
[:z, :d, :u, :n].each do |r|
|
147
|
+
puts " #{m_m[0].to_s.capitalize} #{r.to_s.upcase} ".center(80, '-')
|
148
|
+
rnd = case r
|
149
|
+
when :z
|
150
|
+
:zero
|
151
|
+
when :d
|
152
|
+
:down
|
153
|
+
when :u
|
154
|
+
:up
|
155
|
+
when :n
|
156
|
+
:nearest
|
157
|
+
end
|
158
|
+
|
159
|
+
tik = Time.now
|
160
|
+
case m_m[0]
|
161
|
+
when :add
|
162
|
+
nb_tests.times do |i|
|
163
|
+
res_libm[i] = f[i] + f[nbtm1-i]
|
164
|
+
end
|
165
|
+
when :sub
|
166
|
+
nb_tests.times do |i|
|
167
|
+
res_libm[i] = f[i] - f[nbtm1-i]
|
168
|
+
end
|
169
|
+
when :mul
|
170
|
+
nb_tests.times do |i|
|
171
|
+
res_libm[i] = f[i] * f[nbtm1-i]
|
172
|
+
end
|
173
|
+
when :div
|
174
|
+
nb_tests.times do |i|
|
175
|
+
res_libm[i] = f[i] / f[nbtm1-i]
|
176
|
+
end
|
177
|
+
end
|
178
|
+
tok = Time.now
|
179
|
+
t_libm = tok - tik
|
180
|
+
puts "libm: #{print_time(t_libm)} (#{print_time(t_libm / nb_tests)}/t)"
|
181
|
+
|
182
|
+
method = Float.method(m_m[0])
|
183
|
+
tik = Time.now
|
184
|
+
nb_tests.times do |i|
|
185
|
+
res_mpfr[i] = method.call(f[i], f[nbtm1-i], rnd)
|
186
|
+
end
|
187
|
+
tok = Time.now
|
188
|
+
t_mpfr = tok - tik
|
189
|
+
puts "mpfr: #{print_time(t_mpfr)} (#{print_time(t_mpfr / nb_tests)}/t)"
|
190
|
+
|
191
|
+
method = CRMF.method("#{m_m[0]}_r#{r}")
|
192
|
+
tik = Time.now
|
193
|
+
nb_tests.times do |i|
|
194
|
+
res_crlibm[i] = method.call(f[i], f[nbtm1-i])
|
195
|
+
end
|
196
|
+
tok = Time.now
|
197
|
+
t_crlibm = tok - tik
|
198
|
+
puts "FPU: #{print_time(t_crlibm)} (#{print_time(t_crlibm / nb_tests)}/t)"
|
199
|
+
|
200
|
+
max_diff_pct = 0.0
|
201
|
+
nb_tests.times do |i|
|
202
|
+
next if (not(res_libm[i].finite?) and not(res_mpfr[i].finite?))
|
203
|
+
error_pct = 100.0 * (res_libm[i] - res_mpfr[i]).abs / res_mpfr[i]
|
204
|
+
max_diff_pct = [max_diff_pct, error_pct].max
|
205
|
+
end
|
206
|
+
nb_diff_libm_mpfr = nb_tests.times.count{|i| res_libm[i] != res_mpfr[i]}
|
207
|
+
if nb_diff_libm_mpfr > 0 then
|
208
|
+
estr = ", max error: #{max_diff_pct}%"
|
209
|
+
else
|
210
|
+
estr = ''
|
211
|
+
end
|
212
|
+
puts "libm vs mpfr: #{nb_diff_libm_mpfr}/#{nb_tests} (#{nb_diff_libm_mpfr*100.0/nb_tests}%)#{estr}"
|
213
|
+
|
214
|
+
max_diff_pct = 0.0
|
215
|
+
nb_tests.times do |i|
|
216
|
+
next if (not(res_crlibm[i].finite?) and not(res_mpfr[i].finite?))
|
217
|
+
error_pct = 100.0 * (res_crlibm[i] - res_mpfr[i]).abs / res_mpfr[i]
|
218
|
+
max_diff_pct = [max_diff_pct, error_pct].max
|
219
|
+
end
|
220
|
+
nb_diff_crlibm_mpfr = nb_tests.times.count{|i| res_crlibm[i] != res_mpfr[i]}
|
221
|
+
if nb_diff_crlibm_mpfr > 0 then
|
222
|
+
estr = ", max error: #{max_diff_pct}%"
|
223
|
+
else
|
224
|
+
estr = ''
|
225
|
+
end
|
226
|
+
str = "FPU vs mpfr: #{nb_diff_crlibm_mpfr}/#{nb_tests} (#{nb_diff_crlibm_mpfr*100.0/nb_tests}%)#{estr}"
|
227
|
+
if nb_diff_crlibm_mpfr > 0 then
|
228
|
+
puts str.light_red
|
229
|
+
else
|
230
|
+
puts str
|
231
|
+
end
|
232
|
+
end
|
351
233
|
end
|
352
|
-
puts "crlibm vs mpfr: #{nb_diff_crlibm_mpfr}/#{nb_tests} (#{nb_diff_crlibm_mpfr*100.0/nb_tests}%)#{estr}"
|
353
234
|
|
354
235
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: crmf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Théotime Bollengier
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-07-
|
11
|
+
date: 2022-07-22 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: CRMF is a Ruby C extension which provides correctly rounded math functions
|
14
14
|
for Ruby floats, using MPFR and CRlibm. Provided rounding modes are toward zero,
|
@@ -23,7 +23,108 @@ files:
|
|
23
23
|
- LICENSE
|
24
24
|
- README.md
|
25
25
|
- crmf.gemspec
|
26
|
-
- ext/crlibm-1.
|
26
|
+
- ext/crlibm-1.0beta5/AUTHORS
|
27
|
+
- ext/crlibm-1.0beta5/CMakeLists.txt
|
28
|
+
- ext/crlibm-1.0beta5/COPYING
|
29
|
+
- ext/crlibm-1.0beta5/COPYING.LIB
|
30
|
+
- ext/crlibm-1.0beta5/ChangeLog
|
31
|
+
- ext/crlibm-1.0beta5/Makefile.am
|
32
|
+
- ext/crlibm-1.0beta5/NEWS
|
33
|
+
- ext/crlibm-1.0beta5/README
|
34
|
+
- ext/crlibm-1.0beta5/README.DEV
|
35
|
+
- ext/crlibm-1.0beta5/README.md
|
36
|
+
- ext/crlibm-1.0beta5/TODO
|
37
|
+
- ext/crlibm-1.0beta5/VERSION
|
38
|
+
- ext/crlibm-1.0beta5/acos-td.c
|
39
|
+
- ext/crlibm-1.0beta5/acos-td.h
|
40
|
+
- ext/crlibm-1.0beta5/asin-td.c
|
41
|
+
- ext/crlibm-1.0beta5/asin-td.h
|
42
|
+
- ext/crlibm-1.0beta5/asincos.c
|
43
|
+
- ext/crlibm-1.0beta5/asincos.h
|
44
|
+
- ext/crlibm-1.0beta5/atan-itanium.c
|
45
|
+
- ext/crlibm-1.0beta5/atan-pentium.c
|
46
|
+
- ext/crlibm-1.0beta5/atan-pentium.h
|
47
|
+
- ext/crlibm-1.0beta5/atan_accurate.c
|
48
|
+
- ext/crlibm-1.0beta5/atan_accurate.h
|
49
|
+
- ext/crlibm-1.0beta5/atan_fast.c
|
50
|
+
- ext/crlibm-1.0beta5/atan_fast.h
|
51
|
+
- ext/crlibm-1.0beta5/configure.ac
|
52
|
+
- ext/crlibm-1.0beta5/crlibm.h
|
53
|
+
- ext/crlibm-1.0beta5/crlibm.spec
|
54
|
+
- ext/crlibm-1.0beta5/crlibm_private.c
|
55
|
+
- ext/crlibm-1.0beta5/crlibm_private.h
|
56
|
+
- ext/crlibm-1.0beta5/csh_fast.c
|
57
|
+
- ext/crlibm-1.0beta5/csh_fast.h
|
58
|
+
- ext/crlibm-1.0beta5/double-extended.h
|
59
|
+
- ext/crlibm-1.0beta5/exp-itanium.c
|
60
|
+
- ext/crlibm-1.0beta5/exp-td-standalone.c
|
61
|
+
- ext/crlibm-1.0beta5/exp-td.c
|
62
|
+
- ext/crlibm-1.0beta5/exp-td.h
|
63
|
+
- ext/crlibm-1.0beta5/exp_build_coeffs/exp_fast_table.c
|
64
|
+
- ext/crlibm-1.0beta5/expm1-standalone.c
|
65
|
+
- ext/crlibm-1.0beta5/expm1.c
|
66
|
+
- ext/crlibm-1.0beta5/expm1.h
|
67
|
+
- ext/crlibm-1.0beta5/interval.h
|
68
|
+
- ext/crlibm-1.0beta5/log-de.c
|
69
|
+
- ext/crlibm-1.0beta5/log-de.h
|
70
|
+
- ext/crlibm-1.0beta5/log-de2.c
|
71
|
+
- ext/crlibm-1.0beta5/log-de2.h
|
72
|
+
- ext/crlibm-1.0beta5/log-td.c
|
73
|
+
- ext/crlibm-1.0beta5/log-td.h
|
74
|
+
- ext/crlibm-1.0beta5/log.c
|
75
|
+
- ext/crlibm-1.0beta5/log.h
|
76
|
+
- ext/crlibm-1.0beta5/log10-td.c
|
77
|
+
- ext/crlibm-1.0beta5/log10-td.h
|
78
|
+
- ext/crlibm-1.0beta5/log1p.c
|
79
|
+
- ext/crlibm-1.0beta5/log2-td.c
|
80
|
+
- ext/crlibm-1.0beta5/log2-td.h
|
81
|
+
- ext/crlibm-1.0beta5/log2_accurate.c
|
82
|
+
- ext/crlibm-1.0beta5/log2_accurate.h
|
83
|
+
- ext/crlibm-1.0beta5/log_accurate.c
|
84
|
+
- ext/crlibm-1.0beta5/log_accurate.h
|
85
|
+
- ext/crlibm-1.0beta5/log_fast.c
|
86
|
+
- ext/crlibm-1.0beta5/log_fast.h
|
87
|
+
- ext/crlibm-1.0beta5/pow.c
|
88
|
+
- ext/crlibm-1.0beta5/pow.h
|
89
|
+
- ext/crlibm-1.0beta5/prepare
|
90
|
+
- ext/crlibm-1.0beta5/rem_pio2_accurate.c
|
91
|
+
- ext/crlibm-1.0beta5/rem_pio2_accurate.h
|
92
|
+
- ext/crlibm-1.0beta5/scs_lib/AUTHORS
|
93
|
+
- ext/crlibm-1.0beta5/scs_lib/COPYING
|
94
|
+
- ext/crlibm-1.0beta5/scs_lib/ChangeLog
|
95
|
+
- ext/crlibm-1.0beta5/scs_lib/Doxyfile.dev
|
96
|
+
- ext/crlibm-1.0beta5/scs_lib/Doxyfile.user
|
97
|
+
- ext/crlibm-1.0beta5/scs_lib/INSTALL
|
98
|
+
- ext/crlibm-1.0beta5/scs_lib/Makefile.am
|
99
|
+
- ext/crlibm-1.0beta5/scs_lib/NEWS
|
100
|
+
- ext/crlibm-1.0beta5/scs_lib/README
|
101
|
+
- ext/crlibm-1.0beta5/scs_lib/README.DEV
|
102
|
+
- ext/crlibm-1.0beta5/scs_lib/TODO
|
103
|
+
- ext/crlibm-1.0beta5/scs_lib/VERSION
|
104
|
+
- ext/crlibm-1.0beta5/scs_lib/addition_scs.c
|
105
|
+
- ext/crlibm-1.0beta5/scs_lib/division_scs.c
|
106
|
+
- ext/crlibm-1.0beta5/scs_lib/double2scs.c
|
107
|
+
- ext/crlibm-1.0beta5/scs_lib/main.dox
|
108
|
+
- ext/crlibm-1.0beta5/scs_lib/multiplication_scs.c
|
109
|
+
- ext/crlibm-1.0beta5/scs_lib/poly_fct.c
|
110
|
+
- ext/crlibm-1.0beta5/scs_lib/print_scs.c
|
111
|
+
- ext/crlibm-1.0beta5/scs_lib/rand_scs.c
|
112
|
+
- ext/crlibm-1.0beta5/scs_lib/scs.h
|
113
|
+
- ext/crlibm-1.0beta5/scs_lib/scs2double.c
|
114
|
+
- ext/crlibm-1.0beta5/scs_lib/scs2mpf.c
|
115
|
+
- ext/crlibm-1.0beta5/scs_lib/scs2mpfr.c
|
116
|
+
- ext/crlibm-1.0beta5/scs_lib/scs_private.c
|
117
|
+
- ext/crlibm-1.0beta5/scs_lib/scs_private.h
|
118
|
+
- ext/crlibm-1.0beta5/scs_lib/wrapper_scs.h
|
119
|
+
- ext/crlibm-1.0beta5/scs_lib/zero_scs.c
|
120
|
+
- ext/crlibm-1.0beta5/trigo_accurate.c
|
121
|
+
- ext/crlibm-1.0beta5/trigo_accurate.h
|
122
|
+
- ext/crlibm-1.0beta5/trigo_fast.c
|
123
|
+
- ext/crlibm-1.0beta5/trigo_fast.h
|
124
|
+
- ext/crlibm-1.0beta5/trigpi.c
|
125
|
+
- ext/crlibm-1.0beta5/trigpi.h
|
126
|
+
- ext/crlibm-1.0beta5/triple-double.c
|
127
|
+
- ext/crlibm-1.0beta5/triple-double.h
|
27
128
|
- ext/crmf/crmf.c
|
28
129
|
- ext/crmf/crmf.h
|
29
130
|
- ext/crmf/crmf.map
|
data/ext/crlibm-1.0beta4.tar.gz
DELETED
Binary file
|