Денормализованные числа - IEEE 754 с плавающей запятой
поэтому я пытаюсь узнать больше о денормализованных числах, определенных в стандарте IEEE 754 для чисел с плавающей запятой. Я уже прочитал несколько статей благодаря результатам поиска Google, и я прошел через несколько сообщений StackOverFlow. Однако у меня еще остались некоторые вопросы без ответа.
во-первых, просто чтобы пересмотреть мое понимание того, что такое Денормализованный поплавок:
числа, которые имеют меньше битов точности и меньше (в значимость) чем нормализованные числа
по существу, денормализованный поплавок имеет возможность представлять наименьшее (по величине) число, которое можно представить с любым значением с плавающей запятой.
это звучит правильно? Что-нибудь еще?
Я читал, что:
используя денормализованные числа приходит с ценой исполнения на многих платформы
каких-либо замечаний по это?
Я также читал в одной из статей, что
следует "избегать перекрытия между нормализованными и денормализованными числами"
какие-либо комментарии по этому поводу?
в некоторых презентациях стандарта IEEE при представлении диапазонов с плавающей запятой денормализованные значения исключаются, а таблицы помечаются как "эффективный диапазон", как будто докладчик думает: "мы знаем, что денормализованные числа могут представлять наименьшие возможные значения с плавающей запятой, но из-за некоторых недостатков денормализованных чисел мы выбираем их исключение из диапазонов, которые лучше подходят для сценариев общего использования" - как будто денормализованные числа обычно не используются.
думаю, у меня просто создается впечатление, что использование денормализованных чисел в большинстве случаев не очень хорошо?
Если бы мне пришлось ответить на этот вопрос самостоятельно, я бы хотел думаю, что:
использование денормализованных чисел хорошо, потому что вы можете представлять наименьшие (по величине) числа, возможные-до тех пор, пока точность не важна, и вы не смешиваете их с нормализованными числами, и результирующая производительность приложения соответствует требованиям.
использование денормализованных чисел-это плохо, потому что большинство приложений не требуют представления настолько малых-потеря точности пагубна, и вы можете застрелиться ноги слишком легко смешивая их с нормализованными числами, и в производительности не стоит затрат в большинстве случаев.
любые комментарии по этим двум ответам? Что еще я могу пропустить или не понять о денормализованных числах?
1 ответов
по существу, денормализованный поплавок имеет возможность представлять Наименьшее (по величине) число, которое можно представить с помощью любое значение с плавающей запятой.
это правильно.
использование денормализованных чисел имеет стоимость производительности на многих платформах
штраф отличается на разных процессорах, но он может быть до 2 порядков величины. Причина? То же, что и для этого совет:
следует "избегать перекрытия между нормализованными и денормализованными числами"
вот ключ: denormals-это фиксированный "микроформат" в формате с плавающей запятой IEEE-754. В нормальных числах показатель указывает положение двоичной точки. Донормил числа содержит последние 52 бит с фиксированной точкой и с экспонентой 2-1074 для контры.
так, denormals медленно потому что они требуют особого обращения. В практике они встречаются очень редко, и производители чипов не любят тратить слишком много ценных ресурсов в редких случаях.
смешивание денормалов с нормалями происходит медленно, потому что тогда вы смешиваете форматы, и у вас есть дополнительный шаг преобразования между ними.
Я думаю, я просто продолжаю получать впечатление, что через ненормализованные цифры в большинстве случаев оказываются плохими?
Denormals были созданы для одной основной цели:постепенная потеря значимости. Это способ сохранить относительную разницу между крошечными числами небольшой. Если вы идете прямо от наименьшего нормального числа до нуля (резкое переполнение), относительное изменение бесконечна. Если вы идете в denormals на переполнение, относительное изменение-это еще не совсем точные, но по крайней мере более разумной. И эта разница проявляется в расчетах.
другими словами. Плавающая точка числа распределены неравномерно. Всегда есть одинаковое количество чисел между последовательными степенями двойки: 252 (для двойной точности). Таким образом, без денормалов вы всегда получаете разрыв между 0 и наименьшим числом с плавающей запятой, которое равно 252 умножает размер разницы между наименьшими двумя числами. Denormals восполнить этот пробел равномерно.
в качестве примера о влиянии резкого против постепенного underflow, посмотрите на математически эквивалентно x == y
и x - y == 0
. Если x
и y
крошечные, но разные, и вы используете резкий подток, тогда, если их разница меньше минимального значения отсечки, их разница будет равна нулю, и поэтому эквивалентность нарушается.
при постепенном понижении разница между двумя крошечными, но разными нормальными числами становится денормальной, которая все еще не равна нулю. Эквивалентность сохраняется.
и используя denormals на цель не рекомендуется, потому что они были разработаны только в качестве резервного механизма в исключительных случаях.