3

したがって、私はBeagleBone(ARM 700MHzプロセッサ)でUbuntu 12.04を実行していますが、驚いたことに、Math.Pow()がそのプラットフォーム(Monoビルド2.10.8.1ubuntu2.1)で誤った結果を返すことを発見しました。

いくつか検索した後、これが既知の問題であることを示すこのポスターを見つけました。ほとんど何気なく。a)そもそも問題が発生したこと、b)コアの数学ライブラリでかなり根本的なバグと見なしているものを修正するためのETAがないことに少しショックを受けました。

さらに検索すると、数件のヒットが見つかりましたが、https: //bugzilla.xamarin.com/でこれについては何も言及されていません(バグレポートを提出する予定です)。

それで、確かにまだソースコードに入っていなくても(私はそうするつもりですが)、誰かがこれを修正することの難しさ、またはそもそもどのようにそれを導入できたのかを私に説明できますか?つまり、math.hのpow()関数は期待どおりに機能するので、Math.Pow()はそれをラップすることはできませんか?ここで何が欠けていますか?

浮動小数点演算には、私にはわからないことがあると思うので、これは単なるバグレポートではなく、根本的な問題が何であるか、またはそれが単なる大きな問題であるかどうかを知りたいです。見落とされた問題。

編集:このページは問題の根本をうまく要約しています(debianでのarmhfの移植ステータス): http ://wiki.debian.org/ArmHardFloatTodo

パンチライン:Mono 2.10は、armhfポートでは修正されていないと記載されていますが、mono3.0では進行中です。

4

1 に答える 1

1

問題の詳細な背景については、http: //lists.debian.org/debian-arm/2012/02/msg00000.htmlをご覧ください。

しかし、要約すると、armhfはMonoに対して適切にサポートされているABIではなく、そのARMポートはarmelABIに対して作成されています。つまり、関数呼び出しで浮動小数点パラメーターがどこに渡されるかについて、呼び出し元と呼び出し先が意見を異にすることになります。

「2行のコードを変更するだけ」ということはほとんどなく、一般に、どの2行が間違っているか、代わりに何をすべきかを追跡するためにかなりの労力を必要とします。

于 2012-11-06T22:23:00.400 に答える