38

NaNをフィルターで除外し、少し調整した後、結果を変更せずにfloatを32ビットintとして比較でき、doubleを次のように比較できるという前提に基づいて、数値/統計ライブラリの並べ替え関数を最適化しています。 64ビットint。

これにより、これらの配列の並べ替えが40%程度高速化されるようです。浮動小数点数のビットレベル表現が、IEEE 754である限り、私の仮定は当てはまります。実際に使用されているCPUはありますか(ただし、この仮定を破る可能性のある他の表現を使用する組み込みデバイス(このライブラリは対象外)では?


4

5 に答える 5

25

欠陥のあるPentiumを除いて、x86またはx64ベースのCPUは、浮動小数点演算の標準としてIEEE754を使用しています。

FPA標準とその採用の概要は次のとおりです。

IEEE 754:       Intel x86, and all RISC systems (IBM Power
                and PowerPC, Compaq/DEC Alpha, HP PA-RISC,
                Motorola 68xxx and 88xxx, SGI (MIPS) R-xxxx,
                Sun SPARC, and others);

VAX:            Compaq/DEC

IBM S/390:      IBM (however, in 1998, IBM added an IEEE 754
                option to S/390)

Cray:           X-MP, Y-MP, C-90; other Cray models have been
                based on Alpha and SPARC processors with
                IEEE-754 arithmetic.

かなりエキゾチックなCPUアーキテクチャでライブラリをサポートする計画がない限り、今のところ、CPUの99%がIEEE754に準拠していると想定しても問題ありません。

于 2010-02-10T04:55:40.853 に答える
15

それは、「現実の世界」と想像上の世界の間に線を引く場所によって異なります。

  1. Vax Gフォーマットは引き続きAlphaマシンでサポートされています(HPは少なくとも2013年までサポートすると述べています)。
  2. IBM 16進FPは、引き続きIBMzシリーズのメインフレームでサポートされます。彼らはIEEEの2進数と10進数のサポートを追加しましたが、16進数のFPはかなり高速であるため、ほとんど使用されていないと聞いています(IBMは約45年間最適化しています...)

ごく最近まで、UnisysはBurroughsFP形式をサポートするClearPathIXサーバーと、UnivacFP形式をサポートするClearPathMCPマシンを販売していました。これらは現在(Xeonsで)エミュレーションでのみ実行されていると思いますが、ソフトウェアの観点からは、おそらくさらに10年以上アクティブに使用され続けるでしょう。

DtCyber​​を使用して(エミュレートされた)Control Dataメインフレーム上で独自の浮動小数点形式でPlatoを実行している人も、数人います。(申し訳ありませんが、私の最初の本格的なプログラミングはCDC Cyber​​マシンで行われたため、何十年も「現実の世界」でなかったとしても、それを立ち上げることに抵抗できませんでした)。

于 2010-02-10T05:24:36.323 に答える
6

Cell ProcessorのSPUはいくつかの点で異なります(INFとNANの欠如など)が、違いがあなたの仮定を破るとは思わない...

于 2010-02-10T04:56:10.540 に答える
5

PowerPCプロセッサ(2006年から2007年頃までのMac、現在のIBMサーバーのトン)は、IEEE 754拡張フォーマットの代わりに、ロングダブル用に2つのダブルで構成される128ビットフォーマットを使用します。

ただし、CまたはObjective-Cでは、32ビットまたは64ビットの浮動小数点数を整数として解釈する移植可能な方法はありません(floatとuint32_t、またはdoubleとuint64_tのビット数が同じであると想定)。そのようなことをする必要があるとき、コンパイラーに応じて異なるコードを書かなければなりませんでした(1つはユニオンを使用し、もう1つはdouble*からlonglong *にキャストすることでした)。C++での再解釈が移植可能にそれを行うかどうかはわかりません。

于 2014-08-30T21:52:15.673 に答える
1

多くの実際のCPUには、ネイティブの浮動小数点形式がありません。このようなCPU用のCおよび他の言語の多くの実装は、IEEE-754単精度および倍精度形式を使用し、他の形式が多くの目的により適しているという事実にもかかわらず、拡張精度形式を省略したライブラリをバンドルします。

于 2019-03-23T18:04:28.070 に答える