CPython3.13にmath.fma()が実装されるらしい(最初のプロポーザルから7年越し):https://github.com/python/cpython/issues/73468
21619524 journal polyの日記: にっき 4 日記 by poly 2024年03月24日 7時13分 CPython3.13にmath.fma()が実装されるらしい(最初のプロポーザルから7年越し):https://github.com/python/cpython/issues/73468
これは改悪 (スコア:0)
a*b+c と math.fma(a,b,c)を比べると
処理時間はほぼ同じ
計算結果は微妙にズレる(fmaの方が計算誤差が小さい)
という挙動になります
pythonの処理速度のボトルネックはa,b,cの型チェックであり,fma演算の処理コストなんて誤差でしかありません
fmaのメリットは計算誤差が少ないの1点だけです
pythonで処理速度や計算精度を気にしている人は,昔からnumpyあたりを使っています.今更さらmath.fma()を使うメリットはありません
挙動の差を理解できない人は素直に a*b +c と書くでしょう.つまりmath.fma()にはニーズがありません.
一方でmath.fma()を追加すると, mathモジュールのlookupが遅くなる,後方互換性が崩れる,というデメリットが生じます
まとめるとこれは改悪です.プロポーザルから7年もかかったんだから,当初から問題があるプロポーザルだったわけです.
じゃあなんで今更fmaを追加するのかというと
最大の理由は,pythonにはC99と同等の関数を用意するという妙なポリシーがあるからでしょう.
C99にfmaがあるからpythonも実装する.この主張はポリシーに沿っているので妥当としか言えません.
ちなみにこの話題をするならば,なぜC言語のC99にfmaがあるか,その理由も知っておく必要があるでしょう.
C言語ではfmaに大きな意味があります.C言語は厳密な型チェック付きの言語であり
fmaf(fmaのfloat型バージョン)とfma(double型)fmal(long double型)を使い分けることで計算精度を厳密に扱うことができます.
しかもC99で標準化されたので,fmaを使えば移植性が高いコードになります.素晴らしい恩恵があります.
pythonにおけるfmaの存在意義はなんでしょうか?強いて言えば,pythonのポリシーが腐っていることを説明する良い例になるぐらいでしょうか?私にはmath.fmaは改悪としか思えません.
Re:これは改悪 (スコア:2)
# FMA命令を持たないCPUでの、MSVC(のランタイム)での実装にバグがあるそうなので
# (FreeBSDでの実装にもバグがあるけど軽微)
# CPython3.13のリリース迄に直ってるかどうか…。
Re: (スコア:0)
> C言語は厳密な型チェック付きの言語であり
ここ笑うところ?
Re: (スコア:0)
文脈から見て妥当な表現でしょう。
一か所だけ切りとってゲス顔指摘するマスコミみたいなマネはやめましょう。