質問: (2.0* c* d2* m + d1* d2 + 1.0)/ ((2.0* c + 2.0)* d2); ``` のようになります。 そのまま打ち込めば式を間違えることがないのですが 計算誤差まで考慮して式変形をするとなると 割り算や掛け算による誤差が大きいのか 足し算や引き算による誤差が大きいのか を考える必要があると感じました どちらの演算子が少ない状態のほうが計算誤差が発生しにくいですか --- 追記 書籍「数値計算の常識」には式変形により誤差を回避できる例が挙げられているが具体的にどのように式を変形することが誤差の軽減につながるかについては書かれていない。(特に割り算掛け算について) 多倍長演算や加算アルゴリズムの詳解を期待しているのではなく この質問では式変形により軽減できるのだとしたらどのように変形することが望ましいのかを質問しています。
回答: 計算誤差で言えば、四則演算はあまり関係がありません(乗算、除算の方が影響が大きいのは確かですが)。 どの桁まで誤差を許容できるのか次第です。 結局は`double`型を使えば誤差は生じます。 `double value = 0.1;` でさえ、厳密には`0.1`を持っていません(2進数では表現できないため)。 少数第何桁まで保証したいかによってスケールを変え、整数型で計算を行うのが一般的だと思います。 たとえば、小数点第4位まで保証したければ、 `0.1`は`1000`として扱い、最終的な演算結果に`10000`を除算し、そこで初めて`double`型に代入します。 `Maxima`のビッグフロートはこのあたりを考慮してくれているのではないですか?