rubysl-bigdecimal 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/.travis.yml +8 -0
- data/Gemfile +4 -0
- data/LICENSE +25 -0
- data/README.md +29 -0
- data/Rakefile +1 -0
- data/ext/rubysl/bigdecimal/bigdecimal.c +4760 -0
- data/ext/rubysl/bigdecimal/bigdecimal.h +220 -0
- data/ext/rubysl/bigdecimal/extconf.rb +6 -0
- data/lib/bigdecimal.rb +1 -0
- data/lib/bigdecimal/README +60 -0
- data/lib/bigdecimal/bigdecimal_en.html +796 -0
- data/lib/bigdecimal/bigdecimal_ja.html +799 -0
- data/lib/bigdecimal/jacobian.rb +85 -0
- data/lib/bigdecimal/ludcmp.rb +84 -0
- data/lib/bigdecimal/math.rb +235 -0
- data/lib/bigdecimal/newton.rb +77 -0
- data/lib/bigdecimal/sample/linear.rb +71 -0
- data/lib/bigdecimal/sample/nlsolve.rb +38 -0
- data/lib/bigdecimal/sample/pi.rb +20 -0
- data/lib/bigdecimal/util.rb +65 -0
- data/lib/rubysl/bigdecimal.rb +2 -0
- data/lib/rubysl/bigdecimal/version.rb +5 -0
- data/rubysl-bigdecimal.gemspec +24 -0
- data/spec/abs_spec.rb +49 -0
- data/spec/add_spec.rb +178 -0
- data/spec/case_compare_spec.rb +6 -0
- data/spec/ceil_spec.rb +122 -0
- data/spec/coerce_spec.rb +25 -0
- data/spec/comparison_spec.rb +80 -0
- data/spec/div_spec.rb +143 -0
- data/spec/divide_spec.rb +6 -0
- data/spec/divmod_spec.rb +233 -0
- data/spec/double_fig_spec.rb +8 -0
- data/spec/eql_spec.rb +5 -0
- data/spec/equal_value_spec.rb +6 -0
- data/spec/exponent_spec.rb +37 -0
- data/spec/finite_spec.rb +34 -0
- data/spec/fix_spec.rb +56 -0
- data/spec/fixtures/classes.rb +17 -0
- data/spec/floor_spec.rb +109 -0
- data/spec/frac_spec.rb +47 -0
- data/spec/gt_spec.rb +86 -0
- data/spec/gte_spec.rb +90 -0
- data/spec/induced_from_spec.rb +36 -0
- data/spec/infinite_spec.rb +31 -0
- data/spec/inspect_spec.rb +40 -0
- data/spec/limit_spec.rb +29 -0
- data/spec/lt_spec.rb +84 -0
- data/spec/lte_spec.rb +90 -0
- data/spec/minus_spec.rb +57 -0
- data/spec/mode_spec.rb +64 -0
- data/spec/modulo_spec.rb +11 -0
- data/spec/mult_spec.rb +23 -0
- data/spec/multiply_spec.rb +25 -0
- data/spec/nan_spec.rb +22 -0
- data/spec/new_spec.rb +120 -0
- data/spec/nonzero_spec.rb +28 -0
- data/spec/plus_spec.rb +49 -0
- data/spec/power_spec.rb +5 -0
- data/spec/precs_spec.rb +48 -0
- data/spec/quo_spec.rb +12 -0
- data/spec/remainder_spec.rb +83 -0
- data/spec/round_spec.rb +193 -0
- data/spec/shared/eql.rb +65 -0
- data/spec/shared/modulo.rb +146 -0
- data/spec/shared/mult.rb +97 -0
- data/spec/shared/power.rb +83 -0
- data/spec/shared/quo.rb +59 -0
- data/spec/shared/to_int.rb +27 -0
- data/spec/sign_spec.rb +46 -0
- data/spec/split_spec.rb +87 -0
- data/spec/sqrt_spec.rb +111 -0
- data/spec/sub_spec.rb +52 -0
- data/spec/to_f_spec.rb +54 -0
- data/spec/to_i_spec.rb +6 -0
- data/spec/to_int_spec.rb +7 -0
- data/spec/to_s_spec.rb +71 -0
- data/spec/truncate_spec.rb +100 -0
- data/spec/uminus_spec.rb +57 -0
- data/spec/uplus_spec.rb +19 -0
- data/spec/ver_spec.rb +10 -0
- data/spec/zero_spec.rb +27 -0
- 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 > 0)�A��(sign < 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><=></B></LI><BLOCKQUOTE>
|
507
|
+
a==b �Ȃ� 0�Aa > b �Ȃ� 1�Aa < b �Ȃ� -1 �ɂȂ�܂��B<BR>
|
508
|
+
c = a <=> 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><</B></LI>
|
518
|
+
<LI><B><=</B></LI>
|
519
|
+
<LI><B>></B></LI>
|
520
|
+
<LI><B>>=</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"><shigeo@tinyforest.gr.jp></U></A>)
|
793
|
+
</I>
|
794
|
+
</FONT>
|
795
|
+
</TD>
|
796
|
+
</TR>
|
797
|
+
</TABLE>
|
798
|
+
</BODY>
|
799
|
+
</HTML>
|