Вызывает недополнение в формате с плавающей запятой IEEE-754 с помощью вычитания

Это кажется простым, но у меня много проблем с ответом на следующий вопрос:

Задайте два числа X и Y, представленные в формате IEEE754, так что вычисление X-Y приведет к потере значимости.

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

ПОЖАЛУЙСТА ПОМОГИ!!! спасибо


person mpjunior    schedule 27.09.2013    source источник
comment
Я предполагаю, что это вопрос домашнего задания, поэтому не дам прямого ответа. При каких условиях величина результата вычитания с плавающей запятой намного меньше величины двух входных данных? Какова величина наименьшего числа с плавающей запятой, которое все еще может быть представлено нормализованным способом в формате с плавающей запятой, на который вы смотрите? Объединив ответы на эти два вопроса, вы сможете найти ответ на свой первоначальный вопрос.   -  person njuffa    schedule 27.09.2013


Ответы (2)


Когда действует обработка исключений по умолчанию, вычитание, которое дает крошечный (в субнормальном интервале1) ненулевой результат, концептуально вызывает исключение потери значимости, но наблюдаемого эффекта нет, потому что:

  • Вычитание, которое дает крошечный результат, обязательно является точным из-за характеристик формата с плавающей запятой (нет битов мантиссы ниже, чем биты в субнормальном значении, а вычитание, в отличие от умножения, математически не может иметь битов меньше, чем есть). на входах).
  • В стандарте IEEE 754-2008 говорится, что когда имеет место потеря значимости с обработкой исключений по умолчанию и результат является точным, флаг (включая флаг потери значимости) не поднимается. И, поскольку действует обработка исключений по умолчанию, ловушка (исключительное изменение управления программой) отсутствует.

В качестве домашнего задания вы можете выполнить вычитание, дающее крошечный результат, и законно заявить, что произошло исключение потери значимости, даже если флаг не поднимается и ловушка не возникает.

Чтобы создать наблюдаемые эффекты исключения потери значимости, вам потребуется изменить обработку исключения потери значимости со значения по умолчанию на что-то другое, например, включить ловушку при возникновении потери значимости. Средства для этого зависят от языка.


1 В 32-битном двоичном формате число считается крошечным, если его величина меньше 2–126. В 64-битном формате число считается крошечным, если его величина меньше 2–1023. Стандарт IEEE 754 позволяет определять крохотность либо до, либо после округления результата до нормальной значащей длины.

person Eric Postpischil    schedule 27.09.2013
comment
Я понимаю концепцию, моя проблема чисто теоретическая (независимая от языка). Моя проблема в том, что мне нужно найти числа в формате с плавающей запятой. Для любых двух чисел, которые я могу представить в формате с плавающей запятой, разница между ними также может быть представлена ​​в этом формате. - person mpjunior; 28.09.2013
comment
... Я ищу конкретный пример для двух чисел в формате с одинарной точностью, что вычитание между ними приводит к числу меньшему по величине, чем 2 ^ -149 (наименьшее число по величине в формате с одинарной точностью), если кто-нибудь может предоставить один. Спасибо:) - person mpjunior; 28.09.2013
comment
@mpjunior: результат не обязательно должен быть меньше наименьшего представимого положительного числа; оно должно быть меньше наименьшего положительного нормального числа. - person Stephen Canon; 28.09.2013
comment
Спасибо, Стивен! Теперь вопрос имеет больше смысла :) - person mpjunior; 29.09.2013

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

person Patricia Shanahan    schedule 27.09.2013