パスワードを忘れた? アカウント作成
21619524 journal
Python

polyの日記: にっき 4

日記 by poly

CPython3.13にmath.fma()が実装されるらしい(最初のプロポーザルから7年越し):
https://github.com/python/cpython/issues/73468

  • by Anonymous Coward on 2024年03月25日 1時31分 (#4603437)

    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は改悪としか思えません.

    ここに返信
    • by poly (42427) on 2024年03月25日 2時44分 (#4603438) 日記
      CPythonでmath.fma()が実装されると、(CPythonとの互換性を担保する為に)CythonやNumba(やMojoやErg)でも実装されるでしょうから、それらでmath.fma()を使う局面では恩恵があるのではないかと。
      # FMA命令を持たないCPUでの、MSVC(のランタイム)での実装にバグがあるそうなので
      # (FreeBSDでの実装にもバグがあるけど軽微)
      # CPython3.13のリリース迄に直ってるかどうか…。
    • by Anonymous Coward

      > C言語は厳密な型チェック付きの言語であり

      ここ笑うところ?

      • by Anonymous Coward

        文脈から見て妥当な表現でしょう。
        一か所だけ切りとってゲス顔指摘するマスコミみたいなマネはやめましょう。

typodupeerror

日々是ハック也 -- あるハードコアバイナリアン

読み込み中...