Может ли операция, определенная как поведение, определяемое реализацией, иметь несколько возможных вариантов выполнения?

[conv.fpint] p2 говорит

Если преобразуемое значение находится в диапазоне значений, которые могут быть представлены, но значение не может быть представлено точно, это определяется реализацией выбора следующего более низкого или более высокого представляемого значения.

[intro.abstract] p2 говорит

Некоторые аспекты и операции абстрактной машины описываются в этом документе как определяемые реализацией (например, ). Они составляют параметры абстрактной машины. Каждая реализация должна включать документацию, описывающую ее характеристики и поведение в этих отношениях. Такая документация должна определять экземпляр абстрактной машины, соответствующий этой реализации (именуемый ниже «соответствующим экземпляром»).

[intro.abstract] p5 говорит

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

Учтите, что существует реализация, которая не может представлять значение16777217именно в объекте типа float, и выбор для такого значения может быть либо16777216или16777218. Для всех нечетных моментов оценки преобразования он выбирает более низкое представимое значение, а для всех четных моментов оценки преобразования он выбирает более высокое представимое значение. Является ли это соответствующей реализацией?

      float a1 = 16777217; // 16777216
float a2 = 16777217; // 16777218
.
.
.
float a<2n-1> = 16777217; // 16777216
float a<2n> = 16777217; // 16777218

Обновлять:

Похожий случай:

      sizeof(int);  // 4
sizeof(int);  // 8
.
.
.
sizeof(int);  // 4
sizeof(int);  // 8

Для всех нечетных моментов оценки результаты все4, и для всех четных моментов вычисленияsizeof(int), результаты все8.

0 ответов

Другие вопросы по тегам