12

参照リンク:http ://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2849.pdf

TR2に関する情報と、TR2が今後のC++標準とどのように関連するかについての情報を収集しようとしています。

これが私のこれまでの質問です。重要な質問を見逃した場合は、それらにも回答してください。:)

予備知識:

  1. 現在のC++標準は、浮動小数点値の実際のバイナリ表現については言及していません。それが言うのは、浮動小数点表現は「実装定義」であるということだけです。実際には、私が知っているすべての実装はIEEE754-2008を使用しています。しかし、これは規格の要件ではありません。
  2. decimal32TR2は、言語に追加される新しいタイプ、、、 decimal64およびを識別しdecimal128ます。

コメントのための質問/ポイント:

  1. 上記の新しいタイプ(decimal64など)は、その言語にネイティブなものになるのでしょうか、それともライブラリで提供されるのでしょうか?
  2. 新しい型は、浮動小数点の不正確さの問題を解決するために何かをしますか?もしそうなら、どのように?
  3. TR2は、これらの(または任意の)タイプの特定のバイナリ表現を義務付けていますか?
  4. TR2は今後のC++標準の一部として受け入れられる予定ですか?もしそうなら、いつ?
  5. これらの新しいタイプの実装は、現在利用可能なライブラリ(Boostなど)で利用できますか?
4

3 に答える 3

3

参考までに、リンクされたドキュメントはTR2ではありません。「TR2」は、TR1と同じスタイルのライブラリ拡張のセットを指しますが、「10進浮動小数点算術拡張」のドラフトはまさにそれです。TR2ドラフトはまだありません。当初は0x以降にリリースされる予定でした。したがって、これ以降は、TR2についてではなく、リンクされたドキュメントについて質問していると想定します。

  1. ライブラリ:ただし、ドラフトではstd::decimal、プラットフォーム/実装によって提供されるネイティブ型を簡単にラップできる新しいクラスが定義されています。このTRは、10進リテラルを定義しません。
  2. はい:「変換エラーを回避する最も効率的な方法は、10進演算を使用することです。これを認識して、浮動小数点演算のIEEE 754-2008標準は、10進浮動小数点のエンコードと演算を指定します。このテクニカルレポートは、 IEEE754-2008標準と一致する方法で10進演算を使用できるようにするC++プログラミング言語。」
  3. はい: IEEE 754-2008で定義されている3つの10進エンコード形式は、3つの10進浮動タイプstd::decimal::decimal3264および128に対応しています。ここdecimalNの表のリンクを参照してください
  4. 現在のC++0xドラフトには、これらの提案の兆候はありません。次の基準かもしれませんが、委員会のメンバーでさえ、それがいつ発表されるかをあなたに伝えることはできませんでした。
  5. 簡単なWeb検索を行ったときに、この特定のドラフトについて言及している10進ライブラリは見当たりませんでしたが、ライブラリが必要な場合はいくつかあります。
于 2011-01-13T19:11:53.410 に答える
2

私はたまたま、IBMが最初にWG14とWG21に10進型を提案した会議に出席しました。彼らの最初の提案は、ネイティブタイプとして提供することでした。これは、Cでの唯一の解決策です。しかし、WG21は、C ++がライブラリに数学タイプとしてすでにあることを完全に確信して指摘していませんでした。std::complex<>では、なぜstd::decimal<>でしょうか。パフォーマンスのオーバーヘッドに関する最初の混乱は、コンパイラ拡張std::decimalを明らかにラップする可能性のあるポインタが出たときにすぐに終了しました。_Decimal

これがライブラリで実行できることを強調した後、次の質問は、これを標準ライブラリに含めるべきかどうかでした。結局のところ、これが役立つのは特殊なドメインです。ただし、最も一般的なドメインであるfinanceは、実際には必要ありません(実際には、10進数の浮動小数点ではなく、10進数の固定小数点が必要です)。このフィードバックの後、IBMは彼らの提案をあまり推し進めませんでした。

これらのタイプは、浮動小数点の不正確さの問題を解決しません。1/3はまだ表現できません。ただし、1/5はです。

于 2011-01-14T09:56:53.550 に答える
1

decNumber ++は、IBMによるリファレンス実装です。

于 2011-12-13T10:18:23.197 に答える