質問編集履歴
2
日本語の文法を修正しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -112,15 +112,15 @@
|
|
112
112
|
|
113
113
|
# 追加テストコード
|
114
114
|
|
115
|
-
上記に書いたように
|
115
|
+
(上記に書いたように)初めに1を足しておくと正確な計算が出来ているようなので、
|
116
|
-
|
116
|
+
|
117
|
-
|
117
|
+
1ではなくもう少し小さい値にしたらどうなるのかと気になり、テストしてみました。
|
118
118
|
|
119
119
|
|
120
120
|
|
121
121
|
結果概要:
|
122
122
|
|
123
|
-
少なくとも「0.0001」より
|
123
|
+
初めに足しておく値が少なくとも「0.0001」より小さくなると、計算が上手くいかないという事実が分かりました。
|
124
124
|
|
125
125
|
この結果が何を意味しているのかは全く分かりませんが、とりあえず報告致します。
|
126
126
|
|
1
試したコードを追記しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -105,3 +105,97 @@
|
|
105
105
|
皆さんどうされているのでしょうか。
|
106
106
|
|
107
107
|
よろしくお願い致します。
|
108
|
+
|
109
|
+
|
110
|
+
|
111
|
+
|
112
|
+
|
113
|
+
# 追加テストコード
|
114
|
+
|
115
|
+
上記に書いたように、初めに1を足したら上手くいきました。
|
116
|
+
|
117
|
+
それでは1ではなく、もう少し小さい値にしたらどうなるんだろうと思いテストしてみました。
|
118
|
+
|
119
|
+
|
120
|
+
|
121
|
+
結果概要:
|
122
|
+
|
123
|
+
少なくとも「0.0001」より値が小さくなると、計算が上手くいかないという事実が分かりました。
|
124
|
+
|
125
|
+
この結果が何を意味しているのかは全く分かりませんが、とりあえず報告致します。
|
126
|
+
|
127
|
+
|
128
|
+
|
129
|
+
```
|
130
|
+
|
131
|
+
▼0.1を足しておく
|
132
|
+
|
133
|
+
$n1 = 0.1000000100;
|
134
|
+
|
135
|
+
$n2 = 0.1000000200;
|
136
|
+
|
137
|
+
$sum = bcadd($n1, $n2, 10);
|
138
|
+
|
139
|
+
echo sprintf('%.10f', $sum).PHP_EOL;
|
140
|
+
|
141
|
+
//0.2000000300 //正確
|
142
|
+
|
143
|
+
|
144
|
+
|
145
|
+
▼0.01を足しておく
|
146
|
+
|
147
|
+
$n1 = 0.0100000100;
|
148
|
+
|
149
|
+
$n2 = 0.0100000200;
|
150
|
+
|
151
|
+
$sum = bcadd($n1, $n2, 10);
|
152
|
+
|
153
|
+
echo sprintf('%.10f', $sum).PHP_EOL;
|
154
|
+
|
155
|
+
//0.0200000300 //正確
|
156
|
+
|
157
|
+
|
158
|
+
|
159
|
+
▼0.001を足しておく
|
160
|
+
|
161
|
+
$n1 = 0.0010000100;
|
162
|
+
|
163
|
+
$n2 = 0.0010000200;
|
164
|
+
|
165
|
+
$sum = bcadd($n1, $n2, 10);
|
166
|
+
|
167
|
+
echo sprintf('%.10f', $sum).PHP_EOL;
|
168
|
+
|
169
|
+
//0.0020000300 //正確
|
170
|
+
|
171
|
+
|
172
|
+
|
173
|
+
▼0.0001を足しておく
|
174
|
+
|
175
|
+
$n1 = 0.0001000100;
|
176
|
+
|
177
|
+
$n2 = 0.0001000200;
|
178
|
+
|
179
|
+
$sum = bcadd($n1, $n2, 10);
|
180
|
+
|
181
|
+
echo sprintf('%.10f', $sum).PHP_EOL;
|
182
|
+
|
183
|
+
//0.0002000300 //正確
|
184
|
+
|
185
|
+
|
186
|
+
|
187
|
+
▼0.00001を足しておく
|
188
|
+
|
189
|
+
$n1 = 0.0000100100;
|
190
|
+
|
191
|
+
$n2 = 0.0000100200;
|
192
|
+
|
193
|
+
$sum = bcadd($n1, $n2, 10);
|
194
|
+
|
195
|
+
echo sprintf('%.10f', $sum).PHP_EOL;
|
196
|
+
|
197
|
+
//0.0000000000 //0になった。。
|
198
|
+
|
199
|
+
|
200
|
+
|
201
|
+
```
|