Math.h関数の純粋なc-versionを探しています(共同プロセッサのサポートなし)[閉じた

StackOverflow https://stackoverflow.com/questions/4147972

質問

いくつかの(セミ)自動検証ソフトウェア(CBMCを使用する必要があります (リンク))Cソースで静的に作業しています。フローティングポイントはサポートされていますが、すべての数学関数の定義はありません。数値ソフトウェアを確認できるかどうかを確認する試みです。

したがって、これらの機能が必要です。 私はいくつかを探しています math.h 共同プロセッサの使用のない定義 (例えば sqrt, pow, 、残り、 tan; int/float/double).

LIBCでいくつかのLinuxディストリビューション(おそらく現在eglibc)で出荷されたLIBCでそれを探したとき、私は常にポイントに到達しました。たとえば、ハードウェアSQRT機能を意味するプロセッサイントリンシクスがあります。

パート1:ソフトウェアの実装の検索

私に必要なのは、次の特性を持つ数学的関数をサポートするライブラリです。

  • IEEEフローティングポイントはサポートされていますが、純粋に整数で動作するライブラリも素晴らしいでしょう。
  • 正しさは重要な要因です。 (いくつかのソースに隠された特別なケースの既知のバグはそれほどクールではありません)。結果は、IEEE-754(例:SQRTのルール)の観点からも正しいはずです。
  • 共同プロセッサコールの使用はありません。純粋なソフトウェア。 Cが望ましいですが、ASMも大丈夫です。

これまで、私はさまざまなLIBCの実装、特に組み込みシステムに関するものを少し検索しました。これらのライブラリのほとんどは、コンパイルされたプログラムの携帯性とサイズをターゲットにしていると思いますが、プロセッサ固有の指示を使用しているかどうかはわかりにくいです。

  • **fdlibm 一見したところ、いくつかの純粋なソフトウェアの定義があるようです。これをさらに検査します。しかし、ソースに言及されているいくつかのバグがあります(コードは標準ではありません)。
  • **Newlib 同じ定義をもたらしているようです(Sun Microsystemsのコードに基づいています)。しかし、これらのソフトウェアバージョンが常に使用されているかどうかは、現時点では確かに言うことはできません。
  • **uclibc Newlibと特性を共有しているようです。

パート2:これらの実装の構造の理解

  • 誰かが私にこれらの数学ライブラリの構造を簡単に紹介してくれませんか。さまざまなバージョン(特定の共同プロセッサなど)をどのように派遣しますか?

  • そして、ファイル名内のこれらの異なる接頭辞の意味は何ですか。 e_sqrt.c, k_sin, s_sin?

私はいくつかの図書館について聞いてうれしいです たぶん......だろう 私に役立ちます。私はそれが来るようにライブラリを取りたいと思っていますが、それが必要な場合は、いくつかの単一関数の実装を探して小さなライブラリを構築することも可能です。 Math.hで定義されているすべての機能を使用することはありません。

これこれ SO-POSTSは、Java Mathの実装が/に基づいていると言っています fdlibm これは、このライブラリが行く方法だと思われます。私が知っておくべきこのライブラリについての詳細情報を持っている人はいますか?

次の2つを含む多くの可能性があるようです:

  1. GLIBCを使用して、ソフトウェアモードでコンパイルします. 。問題は、自動システムチェックツールを使用できないことです(設定中)。すべての情報を手動で提供する必要があります。 FPコプロセッサの使用を禁止し、SIMD操作を禁止するためのフラグはありますか? FPはスタートである必要があり、コンパイルするとソフトフロートも使用します。編集プロセスは、ホスト(腕など)の特定の決定に多かれ少なかれ依存していると思います。
  2. FDLIBMを使用します (現時点で優先)。問題:プログラムをそれにリンクするにはどうすればよいですか? Assertのような非LIBM関数が必要ですが、インストールされているシステムLIBMではなく、FDLIBMに対してリンクしたいと考えています(したがって、-NodeFaultLibsはアサートの使用を禁止します)。
役に立ちましたか?

解決

IEEE-754インチの完全なソフトウェア実装があります glibc/sysdeps/ieee754. 。ライブラリをコンパイルすると、アーキテクチャ固有のバージョンに自動的に置き換えられる可能性があります(例: ia64/fpu/e_acosf.S)いくつかの機能のものですが、ライブラリ全体もソフトウェアに実装されています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top