rubysl-bigdecimal 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/.travis.yml +8 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE +25 -0
  6. data/README.md +29 -0
  7. data/Rakefile +1 -0
  8. data/ext/rubysl/bigdecimal/bigdecimal.c +4760 -0
  9. data/ext/rubysl/bigdecimal/bigdecimal.h +220 -0
  10. data/ext/rubysl/bigdecimal/extconf.rb +6 -0
  11. data/lib/bigdecimal.rb +1 -0
  12. data/lib/bigdecimal/README +60 -0
  13. data/lib/bigdecimal/bigdecimal_en.html +796 -0
  14. data/lib/bigdecimal/bigdecimal_ja.html +799 -0
  15. data/lib/bigdecimal/jacobian.rb +85 -0
  16. data/lib/bigdecimal/ludcmp.rb +84 -0
  17. data/lib/bigdecimal/math.rb +235 -0
  18. data/lib/bigdecimal/newton.rb +77 -0
  19. data/lib/bigdecimal/sample/linear.rb +71 -0
  20. data/lib/bigdecimal/sample/nlsolve.rb +38 -0
  21. data/lib/bigdecimal/sample/pi.rb +20 -0
  22. data/lib/bigdecimal/util.rb +65 -0
  23. data/lib/rubysl/bigdecimal.rb +2 -0
  24. data/lib/rubysl/bigdecimal/version.rb +5 -0
  25. data/rubysl-bigdecimal.gemspec +24 -0
  26. data/spec/abs_spec.rb +49 -0
  27. data/spec/add_spec.rb +178 -0
  28. data/spec/case_compare_spec.rb +6 -0
  29. data/spec/ceil_spec.rb +122 -0
  30. data/spec/coerce_spec.rb +25 -0
  31. data/spec/comparison_spec.rb +80 -0
  32. data/spec/div_spec.rb +143 -0
  33. data/spec/divide_spec.rb +6 -0
  34. data/spec/divmod_spec.rb +233 -0
  35. data/spec/double_fig_spec.rb +8 -0
  36. data/spec/eql_spec.rb +5 -0
  37. data/spec/equal_value_spec.rb +6 -0
  38. data/spec/exponent_spec.rb +37 -0
  39. data/spec/finite_spec.rb +34 -0
  40. data/spec/fix_spec.rb +56 -0
  41. data/spec/fixtures/classes.rb +17 -0
  42. data/spec/floor_spec.rb +109 -0
  43. data/spec/frac_spec.rb +47 -0
  44. data/spec/gt_spec.rb +86 -0
  45. data/spec/gte_spec.rb +90 -0
  46. data/spec/induced_from_spec.rb +36 -0
  47. data/spec/infinite_spec.rb +31 -0
  48. data/spec/inspect_spec.rb +40 -0
  49. data/spec/limit_spec.rb +29 -0
  50. data/spec/lt_spec.rb +84 -0
  51. data/spec/lte_spec.rb +90 -0
  52. data/spec/minus_spec.rb +57 -0
  53. data/spec/mode_spec.rb +64 -0
  54. data/spec/modulo_spec.rb +11 -0
  55. data/spec/mult_spec.rb +23 -0
  56. data/spec/multiply_spec.rb +25 -0
  57. data/spec/nan_spec.rb +22 -0
  58. data/spec/new_spec.rb +120 -0
  59. data/spec/nonzero_spec.rb +28 -0
  60. data/spec/plus_spec.rb +49 -0
  61. data/spec/power_spec.rb +5 -0
  62. data/spec/precs_spec.rb +48 -0
  63. data/spec/quo_spec.rb +12 -0
  64. data/spec/remainder_spec.rb +83 -0
  65. data/spec/round_spec.rb +193 -0
  66. data/spec/shared/eql.rb +65 -0
  67. data/spec/shared/modulo.rb +146 -0
  68. data/spec/shared/mult.rb +97 -0
  69. data/spec/shared/power.rb +83 -0
  70. data/spec/shared/quo.rb +59 -0
  71. data/spec/shared/to_int.rb +27 -0
  72. data/spec/sign_spec.rb +46 -0
  73. data/spec/split_spec.rb +87 -0
  74. data/spec/sqrt_spec.rb +111 -0
  75. data/spec/sub_spec.rb +52 -0
  76. data/spec/to_f_spec.rb +54 -0
  77. data/spec/to_i_spec.rb +6 -0
  78. data/spec/to_int_spec.rb +7 -0
  79. data/spec/to_s_spec.rb +71 -0
  80. data/spec/truncate_spec.rb +100 -0
  81. data/spec/uminus_spec.rb +57 -0
  82. data/spec/uplus_spec.rb +19 -0
  83. data/spec/ver_spec.rb +10 -0
  84. data/spec/zero_spec.rb +27 -0
  85. metadata +243 -0
@@ -0,0 +1,799 @@
1
+ <!-- saved from url=(0022)http://internet.e-mail -->
2
+ <HTML>
3
+ <HEAD>
4
+ <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=Shift_JIS">
5
+ <style type="text/css"><!--
6
+ body { color: #3f0f0f; background: #fefeff; margin-left: 2em; margin-right: 2em;}
7
+ h1 { color: #ffffff; background-color: #3939AD; border-color: #FF00FF; width: 100%;
8
+ border-style: solid; border-top-width: 0.1em; border-bottom-width: 0.1em; border-right: none;
9
+ border-left: none; padding: 0.1em; font-weight: bold; font-size: 160%; text-align: center;
10
+ }
11
+ h2 { color: #00007f; background-color: #e7e7ff; border-color: #000094; width: 100%;
12
+ border-style: solid; border-left: none; border-right: none; border-top-width: 0.1em; border-bottom-width: 0.1em;
13
+ padding: 0.1em;
14
+ font-weight: bold; font-size: 110%;
15
+ }
16
+ h3 { color: #00007f; padding: 0.2em; font-size: 110%;}
17
+ h4, h5 { color: #000000; padding: 0.2em; font-size: 100%;}
18
+ table { margin-top: 0.2em; margin-bottom: 0.2em; margin-left: 2em; margin-right: 2em;}
19
+ caption { color: #7f0000; font-weight: bold;}
20
+ th { background: #e7e7ff; padding-left: 0.2em; padding-right: 0.2em;}
21
+ td { background: #f3f7ff; padding-left: 0.2em; padding-right: 0.2em;}
22
+ code { color: #0000df;}
23
+ dt { margin-top: 0.2em;}
24
+ li { margin-top: 0.2em;}
25
+ pre
26
+ { BACKGROUND-COLOR: #d0d0d0; BORDER-BOTTOM: medium none; BORDER-LEFT: medium none;
27
+ BORDER-RIGHT: medium none; BORDER-TOP: medium none; LINE-HEIGHT: 100%; MARGIN: 12px 12px 12px 12px;
28
+ PADDING-BOTTOM: 12px; PADDING-LEFT: 12px; PADDING-RIGHT: 12px; PADDING-TOP: 12px;
29
+ WHITE-SPACE: pre; WIDTH: 100%
30
+ }
31
+ --></style>
32
+
33
+ <TITLE>BigDecimal:An extension library for Ruby</TITLE>
34
+ </HEAD>
35
+ <BODY BGCOLOR=#FFFFE0>
36
+ <H1>BigDecimal(�•ϒ����������_���Z�p�g�����C�u����)</H1>
37
+ <DIV align="right"><A HREF="./bigdecimal_en.html">English</A></DIV><BR>
38
+ BigDecimal �̓I�u�W�F�N�g�w���̋��͂ȃX�N���v�g����ł��� Ruby �ɉ•ϒ����������_
39
+ �v�Z�@�\��lj����邽�߂̊g�����C�u�����ł��B
40
+ Ruby �ɂ‚��Ă̏ڂ������e�͈ȉ���URL���Q�Ƃ��Ă��������B
41
+ <UL>
42
+ <LI><A HREF="http://www.ruby-lang.org/ja/">http://www.ruby-lang.org/ja/</A>�FRuby�����y�[�W</LI>
43
+ <LI><A HREF="http://kahori.com/ruby/ring/">http://kahori.com/ruby/ring/</A>�FRuby�Ɋւ���y�[�W��H��܂�</LI>
44
+ </UL>
45
+ <hr>
46
+ <H2>�ڎ�</H2>
47
+ <UL>
48
+ <LI><A HREF="#INTRO">�͂��߂�</LI>
49
+ <LI><A HREF="#SPEC">�g�p���@�ƃ��\�b�h�̈ꗗ</A></LI>
50
+ <LI><A HREF="#UNDEF">�����A�񐔁A�[���̈���</A></LI>
51
+ <LI><A HREF="#STRUCT">�����\��</A></LI>
52
+ <LI><A HREF="#BASE">2�i��10�i</A></LI>
53
+ <LI><A HREF="#PREC">�v�Z���x�ɂ‚���</A></LI>
54
+ </UL>
55
+
56
+ <HR>
57
+ <A NAME="#INTRO">
58
+ <H2>�͂��߂�</H2>
59
+ Ruby �ɂ� Bignum �Ƃ����N���X������A���S���̐����ł��v�Z���邱�Ƃ��ł��܂��B
60
+ �����A�C�ӌ��̕��������_���Z�p�N���X�������悤�ł��B�����ŁA
61
+ �C�ӌ��̕��������_���Z�p�g�����C�u���� BigDecimal ���쐬���܂����B
62
+ �s��⏕���E��Ă�����ꍇ�ǂ��ǂ��A
63
+ <A HREF="mailto:shigeo@tinyforest.gr.jp">shigeo@tinyforest.gr.jp</A>
64
+ �܂ł��m�点���������B�s��𒼂��C�͑傢�ɂ���܂��B�����A���ԂȂǂ̊֌W�Ŗ�
65
+ �͂ł��܂���B�܂��A���ʂɂ‚��Ă��ۏ؂ł�����̂ł͂���܂���B
66
+ �\�߁A���������������B
67
+ <BR><BR>
68
+ ���̃v���O�����́A���R�ɔz�z�E���ς��č\���܂���B�������A���쌠�͕������Ă��܂���B
69
+ �z�z�E���ϓ��̌����� Ruby �̂���ɏ����܂��B�ڂ����� README ��ǂ�ł��������B
70
+
71
+ <hr>
72
+ <H2>�C���X�g�[���ɂ‚���</H2>
73
+ BigDecimal ���܂� Ruby �̍ŐV�ł�<A HREF="http://www.ruby-lang.org/ja/">Ruby�����y�[�W</A>����_�E�����[�h�ł��܂��B
74
+ �_�E�����[�h�����ŐV�ł��𓀂�����A�ʏ�̃C���X�g�[���菇�����s���ĉ������B
75
+ Ruby ���������C���X�g�[�������΁A������ BigDecimal �����p�ł���悤�ɂȂ�͂��ł��B
76
+ �\�[�X�t�@�C����
77
+ bigdecimal.c,bigdecimal.h
78
+ �̂Q�‚݂̂ł��B<BR>
79
+
80
+ <hr>
81
+ <A NAME="#SPEC">
82
+ <H2>�g�p���@�ƃ��\�b�h�̈ꗗ</H2>
83
+ �uRuby�͊��ɏ�����v�Ƃ����O��ŁA
84
+ <CODE><PRE>
85
+ require 'bigdecimal'
86
+ a=BigDecimal::new("0.123456789123456789")
87
+ b=BigDecimal("123456.78912345678",40)
88
+ c=a+b
89
+ </PRE></CODE>
90
+ <br>
91
+ �Ƃ����悤�Ȋ����Ŏg�p���܂��B
92
+
93
+ <H3>���\�b�h�ꗗ</H3>
94
+ �ȉ��̃��\�b�h�����p�”\�ł��B
95
+ �u�L�������v�Ƃ� BigDecimal �����x��ۏ؂��錅���ł��B
96
+ �҂�����ł͂���܂���A�኱�̗]�T�������Čv�Z����܂��B
97
+ �܂��A�Ⴆ�΂R�Q�r�b�g�̃V�X�e���ł͂P�O�i�łS�����Ɍv�Z���܂��B�]���āA����ł́A
98
+ �����́u�L�������v�͂S�̔{���ƂȂ��Ă��܂��B
99
+ <P>
100
+ �ȉ��̃��\�b�h�ȊO�ɂ��A(C �ł͂Ȃ�) Ruby �\�[�X�̌`��
101
+ �񋟂���Ă�����̂�����܂��B�Ⴆ�΁A
102
+ <CODE><PRE>
103
+ require "bigdecimal/math.rb"
104
+ </PRE></CODE>
105
+ �Ƃ��邱�ƂŁAsin �� cos �Ƃ������֐����g�p�ł���悤�ɂȂ�܂��B
106
+ �g�p���@�ȂǁA�ڍׂ� math.rb �̓��e���Q�Ƃ��ĉ������B
107
+
108
+ ���̑��AFloat �Ƃ̑��ݕϊ��Ȃǂ̃��\�b�h�� util.rb �ŃT�|�[�g����Ă��܂��B
109
+ ���p����ɂ�
110
+ <CODE><PRE>
111
+ require "bigdecimal/util.rb"
112
+ </PRE></CODE>
113
+ �̂悤�ɂ��܂��B�ڍׂ� util.rb �̓��e���Q�Ƃ��ĉ������B
114
+
115
+ <H4><U>�N���X���\�b�h</U></H4>
116
+ <UL>
117
+ <LI><B>new</B></LI><BLOCKQUOTE>
118
+ �V���� BigDecimal �I�u�W�F�N�g�𐶐����܂��B<BR>
119
+ a=BigDecimal::new(s[,n]) �܂���<BR>
120
+ a=BigDecimal(s[,n])<BR>
121
+ s �͐�����\�����鏉���l�𕶎���Ŏw�肵�܂��B
122
+ �X�y�[�X�͖�������܂��B�܂��A���f�ł��Ȃ��������o���������_��
123
+ ������͏I���������̂Ƃ݂Ȃ���܂��B
124
+ n �͕K�v�ȗL�������ia �̍ő�L�������j�𐮐��Ŏw�肵�܂��B
125
+ n �� 0 �܂��͏ȗ����ꂽ�Ƃ��́An �̒l�� s �̗L�������Ƃ݂Ȃ���܂��B
126
+ s �̗L��������� n ���������Ƃ��� n=0 �̂Ƃ��Ɠ����ł��B
127
+ a �̍ő�L�������� n ���኱�傢�l���̗p����܂��B
128
+ �ő�L�������͈ȉ��̂悤�Ȋ���Z�����s����Ƃ����ɈӖ��������܂��B
129
+ <CODE><PRE>
130
+ BigDecimal("1") / BigDecimal("3") # => 0.3333333333 33E0
131
+ BigDecimal("1",10) / BigDecimal("3",10) # => 0.3333333333 3333333333 33333333E0
132
+ </PRE></CODE>
133
+ �������A�X�̉��Z�ɂ�����ő�L������ n �̎�舵���͏����̃o�[�W������
134
+ �኱�ύX�����”\��������܂��B
135
+ </BLOCKQUOTE>
136
+
137
+ <LI><B>mode</B></LI><BLOCKQUOTE>
138
+ f = BigDecimal.mode(s[,v])<BR>
139
+ BigDecimal�̎��s���ʂ𐧌䂵�܂��B��Q�������ȗ��A�܂��� nil ���w�肷���
140
+ ����̐ݒ�l���߂�܂��B<BR>
141
+ �ȉ��̎g�p���@����`����Ă��܂��B
142
+ <P>
143
+ <B>[��O����]</B><P>
144
+ �v�Z���ʂ���(NaN)��[���ɂ�鏜�Z�ɂȂ����Ƃ��̏������`���邱�Ƃ��ł��܂��B
145
+ <BLOCKQUOTE>
146
+ f = BigDecimal::mode(BigDecimal::EXCEPTION_NaN,flag)<BR>
147
+ f = BigDecimal::mode(BigDecimal::EXCEPTION_INFINITY,flag)<BR>
148
+ f = BigDecimal::mode(BigDecimal::EXCEPTION_UNDERFLOW,flag)<BR>
149
+ f = BigDecimal::mode(BigDecimal::EXCEPTION_OVERFLOW,flag)<BR>
150
+ f = BigDecimal::mode(BigDecimal::EXCEPTION_ZERODIVIDE,flag)<BR>
151
+ f = BigDecimal::mode(BigDecimal::EXCEPTION_ALL,flag)<BR>
152
+ </BLOCKQUOTE>
153
+
154
+ EXCEPTION_NaN �͌��ʂ� NaN �ɂȂ����Ƃ��̎w��ł��B<BR>
155
+ EXCEPTION_INFINITY �͌��ʂ�������(�}Infinity)�ɂȂ����Ƃ��̎w��ł��B<BR>
156
+ EXCEPTION_UNDERFLOW �͎w�������A���_�[�t���[����Ƃ��̎w��ł��B<BR>
157
+ EXCEPTION_OVERFLOW �͎w�������I�[�o�[�t���[����Ƃ��̎w��ł��B<BR>
158
+ EXCEPTION_ZERODIVIDE �̓[���ɂ�銄��Z�����s�����Ƃ��̎w��ł��B<BR>
159
+ EXCEPTION_ALL �́A�”\�ȑS�Ăɑ΂��Ĉꊇ���Đݒ肷��Ƃ��Ɏg�p���܂��B<BR><BR>
160
+
161
+ flag �� true �̂Ƃ��́A�w�肵����ԂɂȂ����Ƃ��ɗ�O�𔭍s����悤�ɂȂ�܂��B<BR>
162
+ flag �� false�i�f�t�H���g�j�Ȃ�A��O�͔��s����܂���B�v�Z���ʂ͈ȉ��̂悤�ɂȂ�܂��B<BR>
163
+ <BLOCKQUOTE>
164
+ EXCEPTION_NaN �̂Ƃ��A��(NaN)<BR>
165
+ EXCEPTION_INFINITY �̂Ƃ��A����(+ or -Infinity)<BR>
166
+ EXCEPTION_UNDERFLOW �̂Ƃ��A�[��<BR>
167
+ EXCEPTION_OVERFLOW �̂Ƃ��A+Infinity �� -Infinity<BR>
168
+ EXCEPTION_ZERODIVIDE �̂Ƃ��A+Infinity �� -Infinity<BR>
169
+ </BLOCKQUOTE>
170
+ EXCEPTION_INFINITY�AEXCEPTION_OVERFLOW�AEXCEPTION_ZERODIVIDE
171
+ �͍��̂Ƃ��듯���ł��B<BR>
172
+ �߂�l�́A�ݒ��̒l�ł��B�u�l�v�̈Ӗ��́A�Ⴆ��
173
+ BigDecimal::EXCEPTION_NaN�Ɓu�l�v�� & �� �[���ȊO�Ȃ��
174
+ EXCEPTION_NaN���ݒ肳��Ă���Ƃ����Ӗ��ł��B
175
+
176
+ <P>
177
+ <B>[�ۂߏ����w��]</B><P>
178
+ �v�Z�r���̊ۂߑ���̎w�肪�ł��܂��B
179
+ <BLOCKQUOTE>
180
+ f = BigDecimal::mode(BigDecimal::ROUND_MODE,flag)
181
+ </BLOCKQUOTE>
182
+ �̌`���Ŏw�肵�܂��B<BR>
183
+ �����ŁAflag �͈ȉ�(���ʓ��͑Ή�����C���X�^���X���\�b�h)�̈�‚��w�肵�܂��B
184
+ <TABLE>
185
+ <TR><TD>ROUND_UP</TD><TD>�S�Đ؂�グ�܂��B</TD></TR>
186
+ <TR><TD>ROUND_DOWN</TD><TD>�S�Đ؂�̂Ă܂�(truncate)�B</TD></TR>
187
+ <TR><TD>ROUND_HALF_UP</TD><TD>�l�̌ܓ����܂�(�f�t�H���g)�B</TD></TR>
188
+ <TR><TD>ROUND_HALF_DOWN</TD><TD>�܎̘Z�����܂��B</TD></TR>
189
+ <TR><TD>ROUND_HALF_EVEN</TD><TD>�l�̘Z�����܂��B�T�̎��͏�ʂP������̎��̂݌J��グ�܂�(Banker's rounding)�B</TD></TR>
190
+ <TR><TD>ROUND_CEILING</TD><TD>���l�̑傫�����ɌJ��グ�܂�(ceil)�B</TD></TR>
191
+ <TR><TD>ROUND_FLOOR</TD><TD>���l�̏��������ɌJ�艺���܂�(floor)�B</TD></TR>
192
+
193
+ </TABLE>
194
+ �߂�l�͎w���� flag �̒l�ł��B
195
+ ��Q������ nil ���w�肷��ƁA����̐ݒ�l���Ԃ�܂��B
196
+ mode ���\�b�h�ł͊ۂߑ���̈ʒu�����[�U���w�肷�邱�Ƃ͂ł��܂���B
197
+ �ۂߑ���ƈʒu�������Ő��䂵�����ꍇ�� BigDecimal::limit �� truncate/round/ceil/floor�A
198
+ add/sub/mult/div �Ƃ������C���X�^���X���\�b�h���g�p���ĉ������B
199
+ </BLOCKQUOTE>
200
+ <LI><B>limit([n])</B></LI><BLOCKQUOTE>
201
+ ���������BigDecimal�I�u�W�F�N�g�̍ő包����n���ɐ������܂��B
202
+ �߂�l�͐ݒ肷��O�̒l�ł��B�ݒ�l�̃f�t�H���g�l�͂O�ŁA�����������Ƃ����Ӗ��ł��B
203
+ n ���w�肵�Ȃ��A�܂��� n �� nil �̏ꍇ�́A����̍ő包�����Ԃ�܂��B<BR>
204
+ �v�Z�𑱍s����ԂɁA�����̌������������ɑ����Ă��܂��悤�ȏꍇ
205
+ limit �ŗ\�ߌ����𐧌��ł��܂��B���̏ꍇ BigDecimal.mode �Ŏw�肳�ꂽ
206
+ �ۂߏ��������s����܂��B
207
+ �������A�C���X�^���X���\�b�h (truncate/round/ceil/floor/add/sub/mult/div) ��
208
+ ���������� limit ���D�悳��܂��B<BR>
209
+ mf = BigDecimal::limit(n)<BR>
210
+ </BLOCKQUOTE>
211
+
212
+ <LI><B>double_fig</B></LI><BLOCKQUOTE>
213
+ Ruby �� Float �N���X���ێ��ł���L�������̐���Ԃ��܂��B
214
+ <CODE><PRE>
215
+ p BigDecimal::double_fig # ==> 20 (depends on the CPU etc.)
216
+ </PRE></CODE>
217
+ double_fig�͈ȉ��� C �v���O�����̌��ʂƓ����ł��B
218
+ <CODE><PRE>
219
+ double v = 1.0;
220
+ int double_fig = 0;
221
+ while(v + 1.0 > 1.0) {
222
+ ++double_fig;
223
+ v /= 10;
224
+ }
225
+ </PRE></CODE>
226
+ </BLOCKQUOTE>
227
+
228
+ <LI><B>BASE</B></LI><BLOCKQUOTE>
229
+ �����Ŏg�p������̒l�ł��B������ 32 �r�b�g�̏����n�ł�10000�ł��B<BR>
230
+ b = BigDecimal::BASE<BR>
231
+ </BLOCKQUOTE>
232
+ </UL>
233
+
234
+ <H4><U>�C���X�^���X���\�b�h</U></H4>
235
+ <UL>
236
+ <LI><B>+</B></LI><BLOCKQUOTE>
237
+ ���Z�ic = a + b�j<BR>
238
+ c �̐��x�ɂ‚��Ắu<A HREF="#PREC">�v�Z���x�ɂ‚���</A>�v���Q�Ƃ��Ă��������B
239
+ </BLOCKQUOTE>
240
+
241
+ <LI><B>-</B></LI><BLOCKQUOTE>
242
+ ���Z�ic = a - b�j�A�܂��͕������]�ic = -a�j<BR>
243
+ c �̐��x�ɂ‚��Ắu<A HREF="#PREC">�v�Z���x�ɂ‚���</A>�v���Q�Ƃ��Ă��������B
244
+
245
+ </BLOCKQUOTE>
246
+ <LI><B>*</B></LI><BLOCKQUOTE>
247
+ ��Z(c = a * b)<BR>
248
+ c�̐��x��(a�̐��x)+(b�̐��x)���x�ł��B<br>
249
+ �ڂ����́u<A HREF="#PREC">�v�Z���x�ɂ‚���</A>�v���Q�Ƃ��Ă��������B
250
+
251
+ </BLOCKQUOTE>
252
+ <LI><B>/</B></LI><BLOCKQUOTE>
253
+ ���Z(c = a / b)<BR>
254
+ c �̐��x�ɂ‚��Ắu<A HREF="#PREC">�v�Z���x�ɂ‚���</A>�v���Q�Ƃ��Ă��������B
255
+
256
+ </BLOCKQUOTE>
257
+
258
+ <LI><B>add(b,n)</B></LI><BLOCKQUOTE>
259
+ �ȉ��̂悤�Ɏg�p���܂��B<BR>
260
+ c = a.add(b,n)<BR>
261
+ c = a + b ���ő�� n ���܂Ōv�Z���܂��B<BR>
262
+ a + b �̐��x�� n ���傫���Ƃ��� BigDecimal.mode �Ŏw�肳�ꂽ���@�Ŋۂ߂��܂��B<BR>
263
+ n ���[���Ȃ� + �Ɠ����ł��B
264
+ </BLOCKQUOTE>
265
+ <LI><B>sub(b,n)</B></LI><BLOCKQUOTE>
266
+ �ȉ��̂悤�Ɏg�p���܂��B<BR>
267
+ c = a.sub(b,n)<BR>
268
+ c = a - b ���ő�� n ���܂Ōv�Z���܂��B<BR>
269
+ a - b �̐��x�� n ���傫���Ƃ��� BigDecimal.mode �Ŏw�肳�ꂽ���@�Ŋۂ߂��܂��B<BR>
270
+ n ���[���Ȃ� - �Ɠ����ł��B
271
+
272
+ </BLOCKQUOTE>
273
+ <LI><B>mult(b,n)</B></LI><BLOCKQUOTE>
274
+ �ȉ��̂悤�Ɏg�p���܂��B<BR>
275
+ c = a.mult(b,n)<BR>
276
+ c = a * b ���ő�� n ���܂Ōv�Z���܂��B<BR>
277
+ a * b �̐��x�� n ���傫���Ƃ��� BigDecimal.mode �Ŏw�肳�ꂽ���@�Ŋۂ߂��܂��B<BR>
278
+ n ���[���Ȃ� * �Ɠ����ł��B
279
+
280
+ </BLOCKQUOTE>
281
+ <LI><B>div(b[,n])</B></LI><BLOCKQUOTE>
282
+ �ȉ��̂悤�Ɏg�p���܂��B<BR>
283
+ c = a.div(b,n)<BR>
284
+ c = a / b ���ő�� n ���܂Ōv�Z���܂��B
285
+ a / b �̐��x�� n ���傫���Ƃ��� BigDecimal.mode �Ŏw�肳�ꂽ���@�Ŋۂ߂��܂��B<BR>
286
+ n ���[���Ȃ� / �Ɠ����ł��B<BR>
287
+ n ���ȗ����ꂽ�Ƃ��� Float#div �Ɠ��l�Ɍ��ʂ�����(BigDecimal)�ɂȂ�܂��B
288
+ </BLOCKQUOTE>
289
+
290
+ <LI><B>fix</B></LI><BLOCKQUOTE>
291
+ a �̏����_�ȉ��̐؂�̂āB<BR>
292
+ c = a.fix
293
+ </BLOCKQUOTE>
294
+ <LI><B>frac</B></LI><BLOCKQUOTE>
295
+ a �̐��������̐؂�̂āB<BR>
296
+ c = a.frac
297
+ </BLOCKQUOTE>
298
+
299
+ <LI><B>floor[(n)]</B></LI><BLOCKQUOTE>
300
+ c = a.floor<BR>
301
+ a �ȉ��̍ő吮���iBigDecimal �l�j��Ԃ��܂��B
302
+ <CODE><PRE>
303
+ c = BigDecimal("1.23456").floor # ==> 1
304
+ c = BigDecimal("-1.23456").floor # ==> -2
305
+ </PRE></CODE>
306
+ �ȉ��̂悤�Ɉ��� n ��^���邱�Ƃ��ł��܂��B<BR>
307
+ n>=0 �Ȃ�A�����_�ȉ� n+1 �ʂ̐����𑀍삵�܂�(�����_�ȉ����A�ő� n ���ɂ��܂�)�B<BR>
308
+ n �����̂Ƃ��͏����_�ȏ� n ���ڂ𑀍삵�܂�(�����_�ʒu���獶�ɏ��Ȃ��Ƃ� n �‚� 0 �����т܂�)�B<BR>
309
+ <CODE><PRE>
310
+ c = BigDecimal("1.23456").floor(4) # ==> 1.2345
311
+ c = BigDecimal("15.23456").floor(-1) # ==> 10.0
312
+ </PRE></CODE>
313
+
314
+ </BLOCKQUOTE>
315
+ <LI><B>ceil[(n)]</B></LI><BLOCKQUOTE>
316
+ c = a.ceil<BR>
317
+ a �ȏ�̐����̂����A�ł��������������v�Z���A���̒l�iBigDecimal �l�j��Ԃ��܂��B
318
+ <CODE><PRE>
319
+ c = BigDecimal("1.23456").ceil # ==> 2
320
+ c = BigDecimal("-1.23456").ceil # ==> -1
321
+ </PRE></CODE>
322
+
323
+ �ȉ��̂悤�Ɉ�����^���āA�����_�ȉ� n+1 �ʂ̐����𑀍삷�邱�Ƃ��ł��܂��B<BR>
324
+ n>=0 �Ȃ�A�����_�ȉ� n+1 �ʂ̐����𑀍삵�܂�(�����_�ȉ����A�ő� n ���ɂ��܂�)�B<BR>
325
+ n �����̂Ƃ��͏����_�ȏ� n ���ڂ��𑀍삵�܂�(�����_�ʒu���獶�ɏ��Ȃ��Ƃ� n �‚� 0 �����т܂�)�B<BR>
326
+ <CODE><PRE>
327
+ c = BigDecimal("1.23456").ceil(4) # ==> 1.2346
328
+ c = BigDecimal("15.23456").ceil(-1) # ==> 20.0
329
+ </PRE></CODE>
330
+
331
+ </BLOCKQUOTE>
332
+ <LI><B>round[(n[,b])]</B></LI><BLOCKQUOTE>
333
+ c = a.round<BR>
334
+
335
+ �N���X���\�b�h BigDecimal::mode(BigDecimal::ROUND_MODE,flag) �Ŏw�肵��
336
+ ROUND_MODE �ɏ]���Ċۂߑ�������s���܂��B
337
+ BigDecimal::mode(BigDecimal::ROUND_MODE,flag) �ʼn����w�肹���A���A����
338
+ ���w�肵�Ȃ��ꍇ�́u�����_�ȉ����ʂ̐����l�̌ܓ����Đ����iBigDecimal �l�j�v�ɂ��܂��B<BR>
339
+ <CODE><PRE>
340
+ c = BigDecimal("1.23456").round # ==> 1
341
+ c = BigDecimal("-1.23456").round # ==> -1
342
+ </PRE></CODE>
343
+
344
+ �ȉ��̂悤�Ɉ�����^���āA�����_�ȉ� n+1 �ʂ̐����𑀍삷�邱�Ƃ��ł��܂��B<BR>
345
+ n �����̎��́A�����_�ȉ� n+1 �ʂ̐������ۂ߂܂�(�����_�ȉ����A�ő� n ���ɂ��܂�)�B<BR>
346
+ n �����̂Ƃ��͏����_�ȏ� n ���ڂ��ۂ߂܂�(�����_�ʒu���獶�ɏ��Ȃ��Ƃ� n �‚� 0 �����т܂�)�B
347
+ <CODE><PRE>
348
+ c = BigDecimal("1.23456").round(4) # ==> 1.2346
349
+ c = BigDecimal("15.23456").round(-1) # ==> 20.0
350
+ </PRE></CODE>
351
+ �Q�Ԗڂ̈������w�肷��ƁABigDecimal#mode �̎w��𖳎����āA�w�肳�ꂽ���@��
352
+ �ۂߑ�������s���܂��B
353
+ <CODE><PRE>
354
+ c = BigDecimal("1.23456").round(3,BigDecimal::ROUND_HALF_EVEN) # ==> 1.234
355
+ c = BigDecimal("1.23356").round(3,BigDecimal::ROUND_HALF_EVEN) # ==> 1.234
356
+ </PRE></CODE>
357
+
358
+ </BLOCKQUOTE>
359
+ <LI><B>truncate</B></LI><BLOCKQUOTE>
360
+ c = a.truncate<BR>
361
+ �����_�ȉ��̐���؂�̂ĂĐ����iBigDecimal �l�j�ɂ��܂��B<BR>
362
+ �ȉ��̂悤�Ɉ�����^���āA�����_�ȉ� n+1 �ʂ̐����𑀍삷�邱�Ƃ��ł��܂��B<BR>
363
+ n �����̎��́A�����_�ȉ� n+1 �ʂ̐�����؂�̂Ă܂�(�����_�ȉ����A�ő� n ���ɂ��܂�)�B
364
+ n �����̂Ƃ��͏����_�ȏ� n ���ڂ��𑀍삵�܂�(�����_�ʒu���獶�ɏ��Ȃ��Ƃ� n �‚� 0 �����т܂�)�B<BR>
365
+ <CODE><PRE>
366
+ c = BigDecimal("1.23456").truncate(4) # ==> 1.2345
367
+ c = BigDecimal("15.23456").truncate(-1) # ==> 10.0
368
+ </PRE></CODE>
369
+ </BLOCKQUOTE>
370
+
371
+ </BLOCKQUOTE>
372
+ <LI><B>abs</B></LI><BLOCKQUOTE>
373
+ ���̐�Βl<BR>
374
+ c = a.abs<BR>
375
+
376
+ </BLOCKQUOTE>
377
+ <LI><B>to_i</B></LI><BLOCKQUOTE>
378
+ �����_�ȉ���؂�̂ĂĐ����ɕϊ����܂��B<BR>
379
+ i = a.to_i<BR>
380
+ i �͒l�ɉ����� Fixnum �� Bignum �ɂȂ�܂��B
381
+ a �� Infinity �� NaN �̂Ƃ��Ai �� nil �ɂȂ�܂��B
382
+ </BLOCKQUOTE>
383
+ <LI><B>to_f</B></LI><BLOCKQUOTE>
384
+ Float �I�u�W�F�N�g�ɕϊ����܂��B
385
+ ��肫�ߍׂ����l���K�v�Ȃ�� split ���\�b�h�𗘗p����
386
+ ���������B
387
+ </BLOCKQUOTE>
388
+ <LI><B>to_s[(n)]</B></LI><BLOCKQUOTE>
389
+ ������ɕϊ����܂�(�f�t�H���g�� "0.xxxxxEn" �̌`�ɂȂ�܂��j�B
390
+ <CODE><PRE>
391
+ BigDecimal("1.23456").to_s # ==> "0.123456E1"
392
+ </PRE></CODE>
393
+ ���� n �ɐ��̐������w�肳�ꂽ�Ƃ��́A�����_�ŕ������鍶�E�������A���ꂼ�� n ����
394
+ �ɋ󔒂ŋ�؂�܂��B
395
+ <CODE><PRE>
396
+ BigDecimal("0.1234567890123456789").to_s(10) # ==> "0.1234567890 123456789E0"
397
+ </PRE></CODE>
398
+ ���� n �ɐ��̐�����\����������w�肷�邱�Ƃ��ł��܂��B
399
+ <CODE><PRE>
400
+ BigDecimal("0.1234567890123456789").to_s("10") # ==> "0.1234567890 123456789E0"
401
+ </PRE></CODE>
402
+ ������̍ŏ��� '+'�i�܂��� ' '�j��t����ƁA�l�����̏ꍇ�A�擪�� '+'�i�܂��� ' '�j���t���܂�
403
+ �i���̏ꍇ�́A��� '-' ���t���܂��B�j�B
404
+ <CODE><PRE>
405
+ BigDecimal("0.1234567890123456789").to_s(" 10") # ==> " 0.1234567890 123456789E0"
406
+ BigDecimal("0.1234567890123456789").to_s("+10") # ==> "+0.1234567890 123456789E0"
407
+ BigDecimal("-0.1234567890123456789").to_s("10") # ==> "-0.1234567890 123456789E0"
408
+ </PRE></CODE>
409
+
410
+ ����ɕ�����̍Ō�� E(�܂��� e) �� F(�܂��� f) ���w�肷�邱�ƂŁA�ȉ��̂悤��
411
+ �\���`����ύX���邱�Ƃ��ł��܂��B
412
+ <CODE><PRE>
413
+ BigDecimal("1234567890.123456789").to_s("E") # ==> "0.1234567890123456789E10"
414
+ BigDecimal("1234567890.123456789").to_s("F") # ==> "1234567890.123456789"
415
+ BigDecimal("1234567890.123456789").to_s("5E") # ==> "0.12345 67890 12345 6789E10"
416
+ BigDecimal("1234567890.123456789").to_s("5F") # ==> "12345 67890.12345 6789"
417
+ </PRE></CODE>
418
+
419
+ </BLOCKQUOTE>
420
+ <LI><B>exponent</B></LI><BLOCKQUOTE>
421
+ �w�����𐮐��l�ŕԂ��܂��B
422
+ n = a.exponent <BR>
423
+ �� a �̒l�� 0.xxxxxxx*10**n ���Ӗ����܂��B
424
+ </BLOCKQUOTE>
425
+
426
+ <LI><B>precs</B></LI><BLOCKQUOTE>
427
+ n,m = a.precs<BR>
428
+ a �̗L������ (n) �ƍő�L������ (m) �̔z���Ԃ��܂��B
429
+
430
+ </BLOCKQUOTE>
431
+
432
+ <LI><B>sign</B></LI><BLOCKQUOTE>
433
+ �l����(sign &gt; 0)�A��(sign &lt; 0)�A���̑�(sigh==0)�ł��邩�̏���Ԃ��܂��B
434
+ n = a.sign <BR>
435
+ �Ƃ����Ƃ� n �̒l�� a ���ȉ��̂Ƃ����Ӗ����܂��B<BR>
436
+ () �̒��̐����́A���ۂ̒l�ł�(<A HREF="#STRUCT">�u�����\���v</A>���Q��)�B<BR>
437
+ n = BigDecimal::SIGN_NaN(0) : a �� NaN<BR>
438
+ n = BigDecimal::SIGN_POSITIVE_ZERO(1) : a �� +0<BR>
439
+ n = BigDecimal::SIGN_NEGATIVE_ZERO(-1) : a �� -0<BR>
440
+ n = BigDecimal::SIGN_POSITIVE_FINITE(2) : a �͐��̒l<BR>
441
+ n = BigDecimal::SIGN_NEGATIVE_FINITE(-2) : a �͕��̒l<BR>
442
+ n = BigDecimal::SIGN_POSITIVE_INFINITE(3) : a ��+Infinity<BR>
443
+ n = BigDecimal::SIGN_NEGATIVE_INFINITE(-3) : a ��-Infinity<BR>
444
+
445
+ </BLOCKQUOTE>
446
+ <LI><B>nan?</B></LI><BLOCKQUOTE>
447
+ a.nan? �� a ��NaN�̂Ƃ��^��Ԃ��܂��B
448
+ </BLOCKQUOTE>
449
+ <LI><B>infinite?</B></LI><BLOCKQUOTE>
450
+ a.infinite? �� a ��+���̂Ƃ� 1 �A-���̂Ƃ��� -1�A����ȊO�̂Ƃ��� nil ��Ԃ��܂��B
451
+ </BLOCKQUOTE>
452
+ <LI><B>finite?</B></LI><BLOCKQUOTE>
453
+ a.finite? �� a �����܂��� NaN �łȂ��Ƃ��^��Ԃ��܂��B
454
+ </BLOCKQUOTE>
455
+
456
+ <LI><B>zero?</B></LI><BLOCKQUOTE>
457
+ a �� 0 �Ȃ� true �ɂȂ�܂��B<BR>
458
+ c = a.zero?
459
+ </BLOCKQUOTE>
460
+ <LI><B>nonzero?</B></LI><BLOCKQUOTE>
461
+ a �� 0 �Ȃ� nil�A0 �ȊO�Ȃ� a ���̂��̂��Ԃ�܂��B<BR>
462
+ c = a.nonzero?
463
+
464
+ </BLOCKQUOTE>
465
+ <LI><B>split</B></LI><BLOCKQUOTE>
466
+ BigDecimal �l�� 0.xxxxxxx*10**n �ƕ\�������Ƃ��ɁA�����iNaN�̂Ƃ���
467
+ 0�A����ȊO��+1��-1�ɂȂ�܂��j�A
468
+ ���������̕�����i"xxxxxxx"�j�ƁA��i10�j�A�X�Ɏw�� n ��z���
469
+ �Ԃ��܂��B<BR>
470
+ a=BigDecimal::new("3.14159265")<BR>
471
+ f,x,y,z = a.split<BR>
472
+ �Ƃ���ƁAf=+1�Ax="314159265"�Ay=10�Az=1�ɂȂ�܂��B<BR>
473
+ �]���āA<BR>
474
+ s = "0."+x<BR>
475
+ b = f*(s.to_f)*(y**z)<BR>
476
+ �� Float �ɕϊ����邱�Ƃ��ł��܂��B
477
+ </BLOCKQUOTE>
478
+ <LI><B>inspect</B></LI><BLOCKQUOTE>
479
+ �f�o�b�O�o�͂Ɏg�p����܂��B<BR>
480
+ p a=BigDecimal::new("3.14",10)<BR>
481
+ �Ƃ���ƁA[0x112344:'0.314E1',4(12)]�̂悤�ɏo�͂���܂��B
482
+ �ŏ���16�i���̓I�u�W�F�N�g�̃A�h���X�A���� '0.314E1' �͒l�A
483
+ ����4�͌��݂̗L������(�\�����኱�傫�����Ƃ�����܂�)�A
484
+ �Ō�̓I�u�W�F�N�g����蓾��ő包���ɂȂ�܂��B
485
+ </BLOCKQUOTE>
486
+ <LI><B>**</B></LI><BLOCKQUOTE>
487
+ a �� n ����v�Z���܂��B���͐����B<BR>
488
+ c = a ** n<BR>
489
+ ���ʂƂ��� c �̗L������ a �� n �{�ȏ�ɂȂ�̂Œ��ӁB
490
+ </BLOCKQUOTE>
491
+ <LI><B>power</B></LI><BLOCKQUOTE>
492
+ ** �Ɠ����ŁAa �� n ����v�Z���܂��B���͐����B<BR>
493
+ c = a.power(n)<BR>
494
+ ���ʂƂ��� c �̗L������ a �� n �{�ȏ�ɂȂ�̂Œ��ӁB
495
+ </BLOCKQUOTE>
496
+ <LI><B>sqrt</B></LI><BLOCKQUOTE>
497
+ a�̗L���� n ���̕������in �̕������ł͂���܂���j��
498
+ �j���[�g���@�Ōv�Z���܂��B<BR>
499
+ c = a.sqrt(n)<BR>
500
+ </BLOCKQUOTE>
501
+
502
+ <LI><B>divmod,quo,modulo,%,remainder</B></LI><BLOCKQUOTE>
503
+ �ڍׂ͑Ή����� Float �̊e���\�b�h���Q�Ƃ��ĉ������B
504
+ </BLOCKQUOTE>
505
+
506
+ <LI><B>&lt=&gt</B></LI><BLOCKQUOTE>
507
+ a==b �Ȃ� 0�Aa &gt b �Ȃ� 1�Aa &lt b �Ȃ� -1 �ɂȂ�܂��B<BR>
508
+ c = a &lt=&gt b
509
+ </BLOCKQUOTE>
510
+ </UL>
511
+ ��́A�ǂ�Ŏ��̔@���ł��B<BR>
512
+ <UL>
513
+ <LI><B>==</B></LI>
514
+ <LI><B>===</B></LI>
515
+ �u==�v�Ɠ����ł��� case ���Ŏg�p����܂��B
516
+ <LI><B>!=</B></LI>
517
+ <LI><B>&lt</B></LI>
518
+ <LI><B>&lt=</B></LI>
519
+ <LI><B>&gt</B></LI>
520
+ <LI><B>&gt=</B></LI>
521
+ </UL>
522
+
523
+ <H3>coerce�ɂ‚���</H3>
524
+ BigDecimal �I�u�W�F�N�g���Z�p���Z�q�̍��ɂ���Ƃ��́ABigDecimal �I�u�W�F�N�g��
525
+ �E�ɂ���I�u�W�F�N�g��(�K�v�Ȃ�) BigDecimal �ɕϊ����Ă���v�Z���܂��B
526
+ �]���āABigDecimal �I�u�W�F�N�g�ȊO�ł����l���Ӗ�������̂Ȃ�E�ɒu����
527
+ ���Z�͉”\�ł��B<BR>
528
+ �������A������́i�ʏ�j���l�Ɏ����ϊ����邱�Ƃ͂ł��܂���B
529
+ ������𐔒l�Ɏ����ϊ��������ꍇ�� bigfloat.c ��
530
+ �u/* #define ENABLE_NUMERIC_STRING */�v�̃R�����g���O���Ă���A
531
+ �ăR���p�C���A�ăC���X�g�[������K�v������܂��B
532
+ ������Ő��l��^����ꍇ�͒��ӂ��K�v�ł��B���l�ɕϊ��ł��Ȃ�����������ƁA
533
+ �P�ɕϊ����~�߂邾���ŃG���[�ɂ͂Ȃ�܂���B"10XX"�Ȃ�P�O�A"XXXX"�͂O
534
+ �ƈ����܂��B<BR>
535
+ <CODE><PRE>
536
+ a = BigDecimal.E(20)
537
+ c = a * "0.123456789123456789123456789" # ������ BigDecimal �ɕϊ����Ă���v�Z
538
+ </PRE></CODE>
539
+ �������񐔂�\�������Ƃ��āA"Infinity"�A"+Infinity"�A"-Infinity"�A"NaN"
540
+ ���g�p�ł��܂�(�啶���E����������ʂ��܂�)�B�������Amode ���\�b�h�� false ��
541
+ �w�肵���ꍇ�͗�O���������܂��B
542
+ <BR>
543
+ �܂��ABigDecimal�N���X�� coerce�iRuby�{�Q�Ɓj���T�|�[�g���Ă��܂��B
544
+ �]���āABigDecimal �I�u�W�F�N�g���E�ɂ���ꍇ�����͑��v�ł��B
545
+ �����A���݂� Ruby �C���^�v���^�̎d�l��A�����񂪍��ɂ���ƌv�Z�ł��܂���B<BR>
546
+ <CODE><PRE>
547
+ a = BigDecimal.E(20)
548
+ c = "0.123456789123456789123456789" * a # �G���[
549
+ </PRE></CODE>
550
+ �K�v��������Ƃ͎v���܂��񂪁A�ǂ����Ă��ƌ����l��
551
+ String �I�u�W�F�N�g���p�������V���ȃN���X���쐬���Ă���A
552
+ ���̃N���X�� coerce ���T�|�[�g���Ă��������B
553
+
554
+ <hr>
555
+ <A NAME="#UNDEF">
556
+ <H2>�����A�񐔁A�[���̈���</H2>
557
+ �u�����v�Ƃ͕\���ł��Ȃ����炢�傫�Ȑ��ł��B���ʂɈ������߂�
558
+ +Infinity�i���̖�����j�� -Infinity�i���̖�����j�Ƃ���
559
+ �悤�ɕ\�L����܂��B
560
+ ������ 1.0/0.0 �̂悤�Ƀ[���Ŋ���悤�Ȍv�Z�������Ƃ��ɐ�������܂��B
561
+ <BR><BR>
562
+ �u�񐔁v�� 0.0/0.0 �� Infinity-Infinity ���̌��ʂ���`�ł��Ȃ�
563
+ �v�Z�������Ƃ��ɐ�������܂��B�񐔂� NaN�iNot a Number�j�ƕ\�L����܂��B
564
+ NaN ���܂ތv�Z�͑S�� NaN �ɂȂ�܂��B�܂� NaN �͎������܂߂āA�ǂ�Ȑ�
565
+ �Ƃ���v���܂���B
566
+ <BR><BR>
567
+ �[���� +0.0 �� -0.0 �����݂��܂��B�������A+0.0==-0.0 �� true �ł��B
568
+ <BR><BR>
569
+ Infinity�ANaN�A +0.0 �� -0.0 �����܂񂾌v�Z���ʂ͑g�ݍ��킹��
570
+ ��蕡�G�ł��B�����̂���l�́A�ȉ��̃v���O���������s���Č��ʂ�
571
+ �m�F���Ă��������i���ʂɂ‚��āA�^���ԈႢ�𔭌����ꂽ����
572
+ ���m�点�肢�܂��j�B
573
+
574
+ <PRE>
575
+ <CODE>
576
+ require "bigdecimal"
577
+
578
+ aa = %w(1 -1 +0.0 -0.0 +Infinity -Infinity NaN)
579
+ ba = %w(1 -1 +0.0 -0.0 +Infinity -Infinity NaN)
580
+ opa = %w(+ - * / <=> > >= < == != <=)
581
+
582
+ for a in aa
583
+ for b in ba
584
+ for op in opa
585
+ x = BigDecimal::new(a)
586
+ y = BigDecimal::new(b)
587
+ eval("ans= x #{op} y;print a,' ',op,' ',b,' ==> ',ans.to_s,\"\n\"")
588
+ end
589
+ end
590
+ end
591
+ </CODE>
592
+ </PRE>
593
+
594
+ <hr>
595
+ <A NAME="#STRUCT">
596
+ <H2>�����\��</H2>
597
+ BigDecimal�����ŕ��������_�͍\����(Real)�ŕ\������܂��B
598
+ ���̂����������� unsigned long �̔z��(�ȉ��̍\���̗v�ffrac)�ŊǗ�����܂��B
599
+ �T�O�I�ɂ́A�ȉ��̂悤�ɂȂ�܂��B<BR><BR>
600
+ <���������_��> = 0.xxxxxxxxx*BASE**n<BR><BR>
601
+ �����ŁAx�͉�������\�������ABASE�͊�i�P�O�i�Ȃ�P�O�j�An�͎w������\��
602
+ �����l�ł��BBASE���傫���قǁA�傫�Ȑ��l���\���ł��܂��B�‚܂�A�z��̃T�C�Y��
603
+ ���Ȃ��ł��܂��BBASE�͑傫���قǓs�����悢�킯�ł����A�f�o�b�O�̂��₷���Ȃǂ�
604
+ �l�����āA10000�ɂȂ��Ă��܂��iBASE��VpInit()�֐��Ŏ����I�Ɍv�Z���܂��j�B
605
+ ����́A32�r�b�g�����̏ꍇ�ł��B64�r�b�g�����̏ꍇ�͂����Ƒ傫�Ȓl�ɂȂ�܂��B
606
+ �c�O�Ȃ���A64�r�b�g�����ł̃e�X�g�͂܂�����Ă��܂���i�����A���ꂽ���������
607
+ ���ʂ������Ă���������΂��肪�����ł��j�B
608
+ BASE��10000�̂Ƃ��́A�ȉ��̉������̔z��(frac)�̊e�v�f�ɂ͍ő�łS����
609
+ �������i�[����܂��B<BR><BR>
610
+ ���������_�\����(Real)�͈ȉ��̂悤�ɂȂ��Ă��܂��B
611
+ <BR>
612
+ <CODE><PRE>
613
+ typedef struct {
614
+ unsigned long MaxPrec; // �ő吸�x(frac[]�̔z��T�C�Y)
615
+ unsigned long Prec; // ���x(frac[]�̎g�p�T�C�Y)
616
+ short sign; // �ȉ��̂悤�ɕ������̏�Ԃ��`���܂��B
617
+ // ==0 : NaN
618
+ // 1 : +0
619
+ // -1 : -0
620
+ // 2 : ���̒l
621
+ // -2 : ���̒l
622
+ // 3 : +Infinity
623
+ // -3 : -Infinity
624
+ unsigned short flag; // �e��̐���t���b�O
625
+ int exponent; // �w�����̒l(������*BASE**exponent)
626
+ unsigned long frac[1]; // �������̔z��(�•�)
627
+ } Real;
628
+ </CODE></PRE>
629
+ �Ⴆ�� 1234.56784321 �Ƃ���������(BASE=10000�Ȃ�)<BR>
630
+ <PRE>
631
+ 0.1234 5678 4321*(10000)**1
632
+ </PRE>
633
+ �ł����� frac[0]=1234�Afrac[1]=5678�Afrac[2]=4321�A
634
+ Prec=3�Asign=2�Aexponent=1 �ƂȂ�܂��BMaxPrec��
635
+ Prec ���傫����΂����‚ł����܂��܂���Bflag ��
636
+ �g�p���@�͎����Ɉˑ����ē����Ŏg�p����܂��B
637
+
638
+ <hr>
639
+ <A NAME="#BASE">
640
+ <H2>2�i��10�i</H2>
641
+ BigDecimal �� <���������_��> = 0.xxxxxxxxx*10**n �Ƃ���10�i�`���Ő��l��ێ����܂��B
642
+ �������A�v�Z�@�̕��������_���̓����\���́A�����܂ł��Ȃ� <���������_��> = 0.bbbbbbbb*2**n �Ƃ���
643
+ 2�i�`�������ʂł�(x �� 0 ���� 9 �܂ŁAb �� 0 �� 1 �̐���)�B
644
+ BigDecimal ���Ȃ�10�i�̓����\���`�����̗p�����̂����ȉ��ɐ������܂��B
645
+ <H4>10�i�̃����b�g</H4>
646
+ <DL>
647
+ <DT>�f�o�b�O�̂��₷��
648
+ <DD>�܂��A�v���O�����쐬���y�ł��Bfrac[0]=1234�Afrac[1]=5678�Afrac[2]=4321�A
649
+ exponent=1�Asign=2 �Ȃ琔�l�� 1234.56784321 �ł���̂͌���Β����ɕ�����܂��B
650
+
651
+ <DT>10�i�\�L���ꂽ���l�Ȃ�m���ɓ����\���ɕϊ��ł���
652
+ <DD>�Ⴆ�΁A�ȉ��̂悤�ȃv���O�����͑S���덷������
653
+ �v�Z���邱�Ƃ��ł��܂��B�ȉ��̗�́A��s�Ɉ�‚̐��l
654
+ �������Ă���t�@�C�� file �̍��v���l�����߂���̂ł��B
655
+ <CODE><PRE>
656
+ file = File::open(....,"r")
657
+ s = BigDecimal::new("0")
658
+ while line = file.gets
659
+ s = s + line
660
+ end
661
+ </PRE></CODE>
662
+ ���̗��2�i���ł��ƌ덷�����荞�މ”\��������܂��B
663
+ �Ⴆ�� 0.1 ��2�i�ŕ\������� 0.1 = b1*2**(-1)+b1*2**(-2)+b3*2**(-3)+b4*2**(-4)....
664
+ �Ɩ����ɑ����Ă��܂��܂�(b1=0,b2=0,b3=0,b4=1...)�B������ bn(n=1,2,3,...) ��
665
+ 2�i��\������ 0 �� 1 �̐�����ł��B�]���āA�ǂ����őł��؂�K�v������܂��B
666
+ �����ŕϊ��덷������܂��B�������A������ēx10�i�\�L�ɂ��Ĉ������悤��
667
+ �ꍇ�͓K�؂Ȋۂߑ���i�l�̌ܓ��j�ɂ���čĂ� "0.1" �ƕ\������܂��B�������A
668
+ �����ł͐��m�� 0.1 �ł͂���܂���B
669
+
670
+ <DT>�L�������͗L���ł���i�‚܂莩������ł���j
671
+ <DD>0.1 ��\�����邽�߂̗̈�͂�������‚̔z��v�f�i frac[0]=1 �j�ōς݂܂��B
672
+ �z��v�f�̐���10�i���l���玩���I�Ɍ���ł��܂��B����́A�•ϒ����������_���Z�ł�
673
+ �厖�Ȃ��Ƃł��B�t�� 0.1 ��2�i�\�������Ƃ��ɂ�2�i�̗L�����������‚ɂ���̂� 0.1 ��
674
+ ���������ł͌���ł��܂���B
675
+ </DL>
676
+
677
+ <H3>10�i�̃f�����b�g</H3>
678
+ ���͍��܂ł̃����b�g�́A���̂܂܃f�����b�g�ɂ��Ȃ�܂��B
679
+ ���������A10�i��2�i�ɕϊ�����悤�ȑ���͕ϊ��덷
680
+ �𔺂��ꍇ��������邱�Ƃ͂ł��܂���B
681
+ ��T�̃R���s���[�^��10�i�̓����\���������Ă��Ȃ��̂ŁA
682
+ BigDecimal �𗘗p���Č덷�����̌v�Z������ꍇ�́A�v�Z���x
683
+ �𖳎����Ă��Ō�܂� BigDecimal ���g�p������K�v������܂��B
684
+
685
+ <H3>�ŏ��͉����H</H3>
686
+ �����Ōv�Z����Ƃ��ɂ킴�킴2�i�����g���l�͋ɂ߂Ă܂�ł��B
687
+ �v�Z�@�Ƀf�[�^����͂���Ƃ����قƂ�ǂ̏ꍇ�A
688
+ 10�i���œ��͂��܂��B���̌��ʁAdouble ���̌v�Z�@����
689
+ �\���͍ŏ�����덷�������Ă���ꍇ������܂��B
690
+ BigDecimal �̓��[�U���͂��덷�����Ŏ�荞�ނ��Ƃ��ł��܂��B
691
+ �f�o�b�O�����₷���̂ƁA�f�[�^�ǂ݂��ݎ��Ɍ덷������Ȃ�
692
+ �Ƃ����̂����ۂ̃����b�g�ł��B
693
+
694
+ <hr>
695
+ <A NAME="#PREC">
696
+ <H2>�v�Z���x�ɂ‚���</H2>
697
+ c = a op b �Ƃ����v�Z(op �� + - * /)�������Ƃ��̓����
698
+ �ȉ��̂悤�ɂȂ�܂��B<BR><BR>
699
+ �P�D��Z��(a �̗L������)+(b �̗L������)�A
700
+ ���Z��(a �̍ő�L������)+(b �̍ő�L������)���̍ő包���i���ۂ́A�]�T�������āA
701
+ ���������傫���Ȃ�܂��j�����•ϐ� c ��V���ɐ������܂��B
702
+ �����Z�̏ꍇ�́A�덷���o�Ȃ������̐��x������ c �𐶐����܂��B�Ⴆ��
703
+ c = 0.1+0.1*10**(-100) �̂悤�ȏꍇ�Ac �̐��x�͂P�O�O���ȏ�̐��x��
704
+ ���‚悤�ɂȂ�܂��B
705
+ <BR><BR>
706
+ �Q�D���� c = a op b �̌v�Z�����s���܂��B<BR><BR>
707
+ ���̂悤�ɁA�����Z�Ə�Z�ł� c �͕K���u�덷���o�Ȃ��v�����̐��x��
708
+ �����Đ�������܂�(BigDecimal.limit ���w�肵�Ȃ��ꍇ)�B
709
+ ���Z��(a �̍ő�L������)+(b �̍ő�L������)���̍ő包��
710
+ ������ c ����������܂����Ac = 1.0/3.0 �̂悤�Ȍv�Z�Ŗ��炩�Ȃ悤�ɁA
711
+ c �̍ő吸�x�𒴂���Ƃ���Ōv�Z���ł��؂���ꍇ������܂��B<BR><BR>
712
+ ������ɂ���Ac �̍ő吸�x�� a �� b ���傫���Ȃ�܂��̂� c ���K�v�Ƃ���
713
+ �������[�̈�͑傫���Ȃ邱�Ƃɒ��ӂ��ĉ������B
714
+ <BR><BR>
715
+ ���ӁF�u+,-,*,/�v�ł͌��ʂ̐��x�i�L�������j�������Ŏw��ł��܂���B
716
+ ���x���R���g���[���������ꍇ�́A�ȉ��̃C���X�^���X���\�b�h���g�p���܂��B<BR>
717
+ <UL>
718
+ <LI>add,sub,mult,div</LI><BLOCKQUOTE>
719
+ �����̃��\�b�h�͐擪(�ō�)�̐�������̌������w��ł��܂��B
720
+ <CODE><PRE>
721
+ BigDecimal("2").div(3,12) # 2.0/3.0 => 0.6666666666 67E0
722
+ </PRE></CODE>
723
+ </BLOCKQUOTE>
724
+ <LI>truncate,round,ceil,floor</LI><BLOCKQUOTE>
725
+ �����̃��\�b�h�͏����_����̑��Έʒu���w�肵�Č��������肵�܂��B
726
+ <CODE><PRE>
727
+ BigDecimal("6.66666666666666").round(12) # => 0.6666666666 667E1
728
+ </PRE></CODE>
729
+ </BLOCKQUOTE>
730
+ </UL>
731
+ <H3>�����Ő��x���R���g���[���������ꍇ</H3>
732
+ �����Ő��x(�L������)���R���g���[���������ꍇ�� add�Asub�Amult�Adiv ���̃��\�b�h
733
+ ���g�p�ł��܂��B
734
+ �ȉ��̉~�������v�Z����v���O������̂悤�ɁA
735
+ ���߂錅���͎����Ŏw�肷�邱�Ƃ��ł��܂��B
736
+ <BR><BR>
737
+ <CODE><PRE>
738
+ #!/usr/local/bin/ruby
739
+
740
+ require "bigdecimal"
741
+ #
742
+ # Calculates 3.1415.... (the number of times that a circle's diameter
743
+ # will fit around the circle) using J. Machin's formula.
744
+ #
745
+ def big_pi(sig) # sig: Number of significant figures
746
+ exp = -sig
747
+ pi = BigDecimal::new("0")
748
+ two = BigDecimal::new("2")
749
+ m25 = BigDecimal::new("-0.04")
750
+ m57121 = BigDecimal::new("-57121")
751
+
752
+ u = BigDecimal::new("1")
753
+ k = BigDecimal::new("1")
754
+ w = BigDecimal::new("1")
755
+ t = BigDecimal::new("-80")
756
+ while (u.nonzero? && u.exponent >= exp)
757
+ t = t*m25
758
+ u = t.div(k,sig)
759
+ pi = pi + u
760
+ k = k+two
761
+ end
762
+
763
+ u = BigDecimal::new("1")
764
+ k = BigDecimal::new("1")
765
+ w = BigDecimal::new("1")
766
+ t = BigDecimal::new("956")
767
+ while (u.nonzero? && u.exponent >= exp )
768
+ t = t.div(m57121,sig)
769
+ u = t.div(k,sig)
770
+ pi = pi + u
771
+ k = k+two
772
+ end
773
+ pi
774
+ end
775
+
776
+ if $0 == __FILE__
777
+ if ARGV.size == 1
778
+ print "PI("+ARGV[0]+"):\n"
779
+ p big_pi(ARGV[0].to_i)
780
+ else
781
+ print "TRY: ruby pi.rb 1000 \n"
782
+ end
783
+ end
784
+
785
+ </PRE></CODE>
786
+ <HR>
787
+ <FONT size=2>
788
+ <I>
789
+ <A HREF="http://www.tinyforest.gr.jp">
790
+ ���� �ΗY
791
+ </A>
792
+ (E-Mail:<A HREF="mailto:shigeo@tinyforest.gr.jp">&ltshigeo@tinyforest.gr.jp&gt</U></A>)
793
+ </I>
794
+ </FONT>
795
+ </TD>
796
+ </TR>
797
+ </TABLE>
798
+ </BODY>
799
+ </HTML>