従来のx86アーキテクチャでは、浮動小数点ユニット(FPU)を使用して浮動小数点計算を実行します。FPUは、それぞれ80ビットの精度を持つ内部レジスタですべての計算を実行します。float
またはを操作しようとするたびdouble
に、変数は最初にメモリからFPUの内部レジスタにロードされます。これは、いずれの場合も計算が完全な80ビットの精度で実行されるため、実際の計算の速度にまったく違いがないことを意味します。異なる可能性がある唯一のことは、メモリから値をロードし、結果をメモリに保存する速度です。double
当然、32ビットプラットフォームでは、に比べてロード/保存に時間がかかる場合がありますfloat
。64ビットプラットフォームでは、違いはありません。
最新のx86アーキテクチャは、「古い」FPU命令を使用せずに、まったく同じ浮動小数点計算を実行できる新しい命令を備えた拡張命令セット(SSE / SSE2)をサポートしています。ただし、ここでも、との計算速度に違いは見られないと思いfloat
ますdouble
。また、これらの最新のプラットフォームは64ビットプラットフォームであるため、ロード/ストアの速度も同じであると想定されています。
別のハードウェアプラットフォームでは、状況が異なる可能性があります。ただし、通常、小さい浮動小数点型ではパフォーマンス上の利点はありません。小さい浮動小数点型の主な目的は、パフォーマンスを向上させることではなく、メモリを節約することです。
編集:(@MSaltersコメントに対処するため)上記で述べたことは、基本的な算術演算に適用されます。ライブラリ関数に関しては、答えはいくつかの実装の詳細に依存します。プラットフォームの浮動小数点命令セットに、特定のライブラリ関数の機能を実装する命令が含まれている場合、上記で述べたことは通常、その関数にも適用されます(通常、、、などの関数が含まれますsin
)。FP命令セットで機能がすぐにサポートされていない他の機能の場合、状況が大幅に異なることが判明する可能性があります。そのような関数のバージョンは、それらのバージョンよりも効率的に実装できる可能性があります。cos
sqrt
float
double