teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

誤字

2020/07/23 01:44

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  > 提示コードのコメント欄の実行結果にもある通り浮動小数点の誤差を確認出来たのですがこれは値が割り切れない時に値を丸まるという処理の誤差です。 そのほかどんな誤差が生まれるのでしょうか?それとその修正方法が知りたいです。
2
2
 
3
- 浮動小数点数の丸め誤差は、実数を表現可能な桁数が有限な浮動小数点数で表現するという制約により生じる誤差です。例えば、円周率を3桁しか表せないとしたら、正確に表せるのは 3.14 までで誤差として π-3.14 が発生しますね。
3
+ 浮動小数点数の丸め誤差は、表現可能な桁数が有限な浮動小数点数で実数を表現するという制約により生じる誤差です。例えば、円周率を3桁しか表せないとしたら、正確に表せるのは 3.14 までで誤差として π-3.14 が発生しますね。
4
4
 
5
5
  [丸め誤差、打ち切り誤差、情報落ち、桁落ちの意味と例 - 具体例で学ぶ数学](https://mathwords.net/marumegosa#i-3)
6
6
 
@@ -11,13 +11,13 @@
11
11
  ### 1. 有効桁数を増やす
12
12
 
13
13
  表現可能な有効桁数を増やせば誤差は少なくできます。
14
- C/C++ の場合、プリミティブ型な型として float、double が用意されていますが、[Boost Multiprecision Library](https://boostjp.github.io/tips/multiprec-float.html) のような多倍長浮動小数点演算が行えるライブラリを使うことで有効桁数を数百桁とかで計算することも可能です。
14
+ C/C++ の場合、プリミティブ型として float、double が用意されていますが、[Boost Multiprecision Library](https://boostjp.github.io/tips/multiprec-float.html) のような多倍長浮動小数点演算が行えるライブラリを使うことで有効桁数を数百桁とかで計算することも可能です。
15
15
 
16
- プリミティブ型である float/double と違い、計算速度がかなり遅くなるので、使いたい用途に対して、本当にその精度が必要検討してから使ってください。
16
+ プリミティブ型である float/double と違い、計算速度がかなり遅くなるので、使いたい用途に対して、本当にその精度が必要かどうかを検討してから使ってください。
17
17
 
18
18
  ### 2. 丸め誤差が発生しにくいように計算式を組み替える
19
19
 
20
- 以下のように丸め誤差が大きくなるパターンというのがあるので、それを避けるように計算式を変形することで誤差を減らす工夫は可能です。
20
+ 以下のように丸め誤差が大きくなるパターンというのがいくつかあるので、それを避けるように計算式を変形することで誤差を減らす工夫は可能です。
21
21
 
22
22
  * 情報落ち: 絶対値が大きくことなる値同士を演算して、絶対値が小さいほうの有効数字が落ちてしまう現象
23
23
  * 桁落ち: 値がほぼ同じものを減算して有効桁数が減ってしまう現象

2

修正

2020/07/23 01:44

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -20,4 +20,6 @@
20
20
  以下のように丸め誤差が大きくなるパターンというのがあるので、それを避けるように計算式を変形することで誤差を減らす工夫は可能です。
21
21
 
22
22
  * 情報落ち: 絶対値が大きくことなる値同士を演算して、絶対値が小さいほうの有効数字が落ちてしまう現象
23
- * 桁落ち: 値がほぼ同じものを減算して有効桁数が減ってしまう現象
23
+ * 桁落ち: 値がほぼ同じものを減算して有効桁数が減ってしまう現象
24
+
25
+ 例: [chap03.pdf 例題 3.4.3 (2 次方程式の改良)](https://na-inet.jp/nasoft/chap03.pdf)

1

修正

2020/07/23 01:10

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -13,6 +13,8 @@
13
13
  表現可能な有効桁数を増やせば誤差は少なくできます。
14
14
  C/C++ の場合、プリミティブ型な型として float、double が用意されていますが、[Boost Multiprecision Library](https://boostjp.github.io/tips/multiprec-float.html) のような多倍長浮動小数点演算が行えるライブラリを使うことで有効桁数を数百桁とかで計算することも可能です。
15
15
 
16
+ プリミティブ型である float/double と違い、計算速度がかなり遅くなるので、使いたい用途に対して、本当にその精度が必要が検討してから使ってください。
17
+
16
18
  ### 2. 丸め誤差が発生しにくいように計算式を組み替える
17
19
 
18
20
  以下のように丸め誤差が大きくなるパターンというのがあるので、それを避けるように計算式を変形することで誤差を減らす工夫は可能です。