~ubuntu-branches/ubuntu/hardy/ruby1.8/hardy-updates

« back to all changes in this revision

Viewing changes to ext/bigdecimal/bigdecimal_ja.html

  • Committer: Bazaar Package Importer
  • Author(s): akira yamada
  • Date: 2007-03-13 22:11:58 UTC
  • mfrom: (1.1.5 upstream)
  • Revision ID: james.westby@ubuntu.com-20070313221158-h3oql37brlaf2go2
Tags: 1.8.6-1
* new upstream version, 1.8.6.
* libruby1.8 conflicts with libopenssl-ruby1.8 (< 1.8.6) (closes: #410018)
* changed packaging style to cdbs from dbs.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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>