IEEE гарантии с плавающей точкой

Я хотел бы знать, для следующих случаев, если стандарт IEEE гарантирует каждый возможный случай (исключая NaN и бесконечности) с использованием любого процессора, придерживающегося стандарта:

  • Коммутативность: x # y = y # x
  • Ассоциативность: (x # y) # z = x # (y # z)
  • x - x = 0 (всегда ли x - x == 0.0f возвращает true?)
  • x * 0 = 0 (всегда ли x * 0.0f == 0.0f возвращает true?)
  • x * 1 = x (всегда ли x * 1.0f == x возвращает true?)
  • x / x = 1.0f (всегда ли x / x == 1.0f возвращает true? За исключением, конечно, x = 0)

(# означает все операции: + - * /)

1 ответ

Решение
  1. коммутативности: + а также * гарантированы, если ни один из аргументов NaN, - а также / не коммутативны и делятся на 0.0 дает тебе +Inf, -Inf, или же NaN согласно числителю. Здесь я не рассматриваю подписанные нули.

  2. Ассоциативность. Точно нет. Добавление двух небольших чисел, за которыми следует большое число, является контрпримером.

  3. x - x является 0 если x является NaN, +Inf, или же -Inf в этом случае это NaN,

  4. x * 0 является 0 если x является NaN, +Inf, или же -Inf в этом случае это NaN,

  5. x * 1 является x если x является NaN в этом случае это NaN,

  6. x / x является 1 если х не 0.0, +Inf, -Inf, или же NaN в этом случае это NaN,

Обратите внимание на тонкую разницу (5).

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