Действительно ли std::to_chars устраняет неоднозначность с помощью round_to_nearest?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Действительно ли std::to_chars устраняет неоднозначность с помощью round_to_nearest?

Сообщение Anonymous »

[charconv.to.chars] говорит следующее:

Функции, которые принимают значение с плавающей запятой, но не параметр точности, гарантируют, что строковое представление состоит из наименьшего количества символов, так что перед точкой счисления (если она есть) есть хотя бы одна цифра, и анализ представления с использованием соответствующей функции from_chars точно восстанавливает значение.
Если таких представлений несколько, представление с наименьшей разницей из значения аргумента с плавающей запятой, разрешая все оставшиеся связи с помощью округления в соответствии с round_to_nearest ([round.style]).

Я не понимаю, когда на самом деле произойдет самое последнее устранение неоднозначности (с использованием round_to_nearest).
Предположительно, это нарушает точную связь, когда последняя ненулевая цифра в числе равна 5, и это цифра не обязательно представляет одно и то же значение.
Например, гипотетически:
  • Если точное значение 1,25 можно было бы представить как 1,2 или 1,3, это разорвало бы связь между 1,2 и 1,3
  • Если точное значение 1,26 можно было бы представить как либо 1.2 или 1.3, 1.3 предпочтительнее, поскольку оно имеет меньшую разницу с точным значением. Это говорит нам о том, что релевантны только числа, оканчивающиеся на 5.
  • Если точное значение 1,251 можно представить как 1,2 или 1,3, то 1,3 будет предпочтительнее, поскольку оно меньше отличается от точного значения ( против 0,051).
    Это говорит нам о том, что 5 должно быть младшей цифрой.
  • Если точное значение 1,25 можно представить как 1 или 2, то 1 будет предпочтительнее, поскольку оно имеет меньшую разницу с точным значением ( против 0,75).
    Это говорит нам о том, что 5 должно быть единственной незначащей цифрой.
Эти примеры являются гипотетическими, но они показывают, когда необходимо устранение неоднозначности round_to_nearest.
Существует ли какой-либо реальный пример того, где это применимо?
Другими словами, существует ли число с плавающей запятой, точное десятичное число которого у значения есть младшая цифра 5, и только эта цифра незначительна?

Примечание: я не думаю, что первый маркер можно когда-либо применить к шестнадцатеричным числам с плавающей запятой
потому что вам просто нужно представить каждый квартет битов мантиссы с помощью шестнадцатеричной цифры и отбросить конечные нули.
Округление на самом деле никогда не происходит; нет незначащих цифр (кроме конечных нулей), и нечего устранять неоднозначность.

Подробнее здесь: https://stackoverflow.com/questions/798 ... to-nearest
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»