それが「放棄された」と思う理由はわかりませんlong double
.C++標準の一部であるため、準拠した実装ではそれを実装する必要があります.
彼らが「放棄」したのはlong double
、数学関数のオーバーロードであり、次の理由でこれを行いました。
ただし、Win32 プログラミングでは、データ型は 64 ビット精度のデータlong double
型にマップされます。double
これは、long double
古い VS バージョンが 80 ビットであることに加えて、次の理由によるものです。
FP コード生成は、x87 FP スタックの代わりに SSE/SSE2/SSE3 命令セットの使用に切り替えられています。これは、AMD と Intel の最近および将来のチップ世代がパフォーマンスの取り組みに注力しているためです。これらの命令セットは、32 ビットおよび 64 ビットの FP フォーマットのみをサポートします。
それでも、同じサイズdouble
とlong double
型 (両方とも 64 ビットにすることができた) であっても、これらのオーバーロードをサポートしないことを選択したことは残念です。なぜなら、それらはC++ 標準の一部でもあるからです。しかし、まあ、それはあなたのためのマイクロソフトです。ひたすら頑固。
[n3290: 26.8]:
double
の数学関数のバージョンに加えて<cmath>
、C++ ではfloat
、long double
これらの関数のオーバーロードされたバージョンが同じセマンティクスで追加されます。
ただし、これらのオーバーロードは Visual Studio では基本的に非推奨ですが、引き続き使用できるため、引き続き使用できるはずです。
Microsoft ランタイム ライブラリはlong double
、下位互換性のためにのみ数学関数のバージョンを提供します。
使用する代替手段はありますか?(boostライブラリからの代替品にも満足しています)。
long double
特定の範囲の数値をサポートするために依存しているように思えますが、その結果、別のツールチェーンで変更されたときに回帰の問題が発生しました。
特定の数値範囲の要件がある場合は、固定範囲の整数型を使用してください。いくつかのオプションがあります:
stdint.h
- 一部の C++ ツールチェーンが拡張機能としてサポートする C99 機能。
stdint.h
- Boost がライブラリとして再実装する C99 機能。
cstdint
- C++0x コードを作成している場合に役立つ可能性のある C++0x 機能。