Состояние и содержание TR2 W.R.T. C ++ спецификация - PullRequest
12 голосов
/ 13 января 2011

Ссылка: http://www.open -std.org / jtc1 / sc22 / wg21 / docs /apers / 2009 / n2849.pdf

Я пытаюсь собрать информацию о TR2 икак это относится к будущему стандарту C ++, если это вообще так.

Вот мои вопросы до сих пор.Если я пропустил какие-либо важные вопросы, пожалуйста, ответьте на них.:)

Предварительные сведения:

  1. В текущем стандарте C ++ ничего не говорится о двоичном представлении значений с плавающей запятой.Все, что он говорит, - то, что представление с плавающей запятой "определено реализацией".На практике все известные мне реализации используют IEEE 754-2008 .Но это не требование Стандарта.
  2. TR2 определяет новые типы, которые будут добавлены к языку: decimal32, decimal64 и decimal128.

Вопросы / очки для комментариев:

  1. Будут ли новые типы выше (decimal64 и т. Д.) Быть родными для языка или предоставлены в библиотеке?
  2. Делают ли новые типы что-нибудь для решения проблемы неточностей с плавающей запятой?Если да, то как?
  3. Требует ли TR2 конкретное двоичное представление для этих (или любых) типов?
  4. Будет ли TR2 принятым как часть будущего стандарта C ++?Если да, то когда?
  5. Доступна ли реализация этих новых типов в любой доступной в настоящее время библиотеке (например, Boost)?

Ответы [ 3 ]

3 голосов
/ 13 января 2011

К вашему сведению, связанный документ не TR2. «TR2» относится к набору расширений библиотеки в том же стиле, что и TR1, в то время как черновик для «десятичных арифметических расширений с плавающей запятой» является именно этим. Черновика TR2 еще нет, и изначально планировалось, что он выйдет после 0x. Поэтому я буду считать, что вы спрашиваете не о TR2, а о связанном документе.

  1. Библиотека: Однако в проекте определены новые классы в std::decimal, которые могут легко обернуть собственный тип, предоставляемый платформой / реализацией. Этот TR не определяет десятичные литералы.
  2. Да:"Самый эффективный способ избежать ошибки преобразования - это использовать десятичную арифметику. Признавая это, стандарт IEEE 754-2008 для арифметики с плавающей точкой определяет десятичное кодирование с плавающей точкой и арифметику. Это В техническом отчете указаны расширения международного стандарта языка программирования C ++, позволяющие использовать десятичную арифметику в соответствии со стандартом IEEE 754-2008. "
  3. Да: Три формата десятичного кодирования, определенные в IEEE 754-2008, соответствуют трем десятичным типам с плавающей запятой std::decimal::decimal32, 64 и 128. См. Ссылки decimalN в таблице здесь.
  4. Нет никаких признаков этих предложений в текущем черновике C ++ 0x. Может быть, в следующем стандарте, но даже члены комитета не могут сказать вам, когда это выйдет.
  5. Я не видел ни одной десятичной библиотеки, в которой бы упоминался этот черновик, когда я выполнял быстрый поиск в Интернете, но есть несколько, если вам просто нужна библиотека.
2 голосов
/ 14 января 2011

Я оказался на совещании, где IBM первоначально предложила десятичные типы для WG14 и WG21.Их первоначальное предложение состояло в том, чтобы предоставить их как нативные типы, что является практически единственным решением в C. Однако WG21 не был полностью убежден и указал, что C ++ уже имеет std::complex<> в качестве математического типа в библиотеке, так почему бы и нетstd::decimal<>?Первоначальное заблуждение по поводу снижения производительности было быстро закончено, когда было указано, что std::decimal может явно обернуть расширение компилятора _Decimal.

После того, как я сказал, что это можно сделать в библиотеке, следующий вопрос былзатем, должно ли это быть в библиотеке Standard .Это ведь специализированный домен, в котором это полезно.Самая распространенная область - финансы - на самом деле в этом не нуждается (им действительно нужна десятичная с фиксированной запятой, а не десятичная с плавающей запятой).После этого отзыва IBM не стала продвигать свое предложение намного дальше.

Эти типы не решают проблему погрешности с плавающей запятой.1/3 все еще не представима.Однако 1/5 есть.

1 голос
/ 13 декабря 2011

decNumber ++ - эталонная реализация IBM.

...