Подтвердить что ты не робот

Статус и содержание TR2 W.R.T. Спецификация С++

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

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

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

Отборочные:

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

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

  • Являются ли новые типы выше (decimal64 и т.д.) родными для языка или представлены в библиотеке?
  • Делают ли новые типы что-либо для решения проблемы с плавающей запятой? Если да, то как?
  • Предоставляет ли TR2 конкретное двоичное представление для этих (или любых) типов?
  • Будет ли TR2 принят в качестве части предстоящего стандарта С++? Если это так, когда?
  • Является ли реализация этих новых типов доступной в любой доступной в настоящее время библиотеке (например, Boost)?
4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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