Что такое плавающая точка в госуслугах
Разница между фиксированной и плавающей точкой
главное отличие между фиксированной и плавающей точкой в том, что фиксированная точка имеет определенное количество цифр, зарезервированных для целочисленной части и дробной части, в то время как с
Содержание:
главное отличие между фиксированной и плавающей точкой в том, что фиксированная точка имеет определенное количество цифр, зарезервированных для целочисленной части и дробной части, в то время как с плавающей запятой не имеет определенного количества цифр, зарезервированных для целочисленной части и дробной части.
Ключевые области покрыты
1. Что такое фиксированная точка
— определение, функциональность
2. Что такое плавающая точка
— определение, функциональность
3. Разница между фиксированной точкой и плавающей точкой
— Сравнение основных различий
Основные условия
Фиксированная точка, с плавающей точкой
Что такое фиксированная точка
В целом, представление с фиксированной точкой позволяет повысить производительность. С другой стороны, он может использоваться только для представления ограниченного диапазона значений.
Что такое плавающая точка
Представление с плавающей точкой может использоваться для преодоления ограничений представления с фиксированной точкой. Поэтому большинство современных компьютеров используют представление с плавающей запятой для хранения дробных чисел в памяти. Он может точно представлять очень большие и очень маленькие числа. Он основан на научной нотации.
Рисунок 2: Научная запись
Число в представлении с плавающей запятой выглядит следующим образом.
+/- Мантисса х 10 показатель степени
Например, 22,33 можно представить как 2,233 х 10 1 0,2233 x 10 2 0,02233 x 10 3 и т. д. Все они представляют собой одно и то же число. Представление с плавающей точкой не всегда уникально.
Точно так же представление с плавающей запятой может применяться к двоичным числам. Формула выглядит следующим образом. База 2.
+/- Мантисса х 2 показатель степени
Разница между фиксированной и плавающей точкой
Определение
Числовое представление
В то время как фиксированная точка может использоваться для представления ограниченного диапазона значений, плавающая точка может использоваться для представления широкого диапазона значений.
Спектакль
Производительность с фиксированной точкой выше, чем с плавающей точкой.
гибкость
Представление с плавающей точкой является более гибким, чем представление с фиксированной точкой.
Заключение
Ссылка:
Что такое плавающая точка в госуслугах?
Где лучше открыть банковский счет?
Где лучше открыть расчетный счет ИП
Точка. Модульбанк. Локо-Банк. Промсвязьбанк.
Для чего нужна точка в русском языке?
Во-первых, именно точка помогает выделить на письме то, что мысль закончена. Если в устной речи мы можем воспользоваться паузами разных длин и характера, то на письме, мы обязательно должны прибегнуть к точке. Во-вторых, только точка способна к воспроизведению на письме кратких форм слов и выражений, иными словами, она помогает нам сокращать слишком длинные слова или те, которые мы достаточно часто используем в общении и на письме.
Для чего служит протокол TCP?
Это наиболее широко используемый протокол для передачи данных в сети связи, такой как Интернет.
До какого-либо числа это включительно или нет
Имеет ли материальная точка размеры?
Материальная точка обладает массой, но имеет пренебрежимо малые размеры
Как использовать электронную подпись на госуслугах?
Электронную подпись выпускают в удостоверяющем центре. Чтобы центр выпустил сертификат на нужный носитель, сообщите, что вы будете пользоваться подписью на Госуслугах. Сотрудник запишет сертификат на поддерживаемый носитель, который будет совместим с вашей операционной системой.
Где на терминале точка?
На терминале нажмите # и перейдите в меню «СЛУЖЕБНЫЕ ОПЕРАЦИИ». Передвигаться можно по кнопкам F1 и F4.
Где открывать расчетный счет?
Где лучше открыть расчетный счет ИП
Точка. Модульбанк. Локо-Банк. Промсвязьбанк.
Как влияет последнее слово на приговор?
В каком банке лучше открывать расчетный счет?
Где выгоднее открыть расчетный счет ООО
Тинькофф Банк. Точка. Модульбанк. Локо-Банк.
Связанные вопросы
Виды процентов по кредиту
Где можно начать плановый слот ответы на тест Яндекс еда?
Точка старта — это место на определённой территории, в котором курьер начинает плановый слот. На каждой территории есть своя такая точка, одна или несколько. Если вы закончили доставку, а новый заказ ещё не пришёл, нужно вернуться на точку старта. Не обязательно в ту, где начинался слот, можно просто выбрать на карте ближайшую.
Как называется самая глубокая точка поверхности земли?
Challenger Deep) — самая глубокая точка поверхности Земли. Расположена в западной части Тихого океана в Марианской впадине. Находится в 1800 км восточнее Филиппин, в юго-западной части впадины, в 500 км на юго-запад от острова Гуам, марианского острова, принадлежащего к микронезийским островам.
Как развить свой дар если он у тебя есть?
Известные экстрасенсы утверждают, что развивать экстрасенсорные способности, нужно начиная с настраивающих упражнений, они поставят их в правильное русло. Нужно закрыть глаза и представить, что у вас посредине лба есть точка, на ней нужно концентрировать все мысли, занимаясь развивающими упражнениями.
Как найти абсолютную отметку?
1. Если точка (угол здания) лежит на горизонтали, то её отметка равна отметке горизонтали. 2. Если точка лежит между горизонталями, то надо провести через эту точку линию, перпендикулярную к соседним горизонталям и измерить длину отрезка «m » в мм (расстояние от младшей горизонтали до точки) и расстояние «d» в мм между горизонталями.
Как узнать МФЦ по адресу прописки?
Найти МФЦ можно на сайте: мои документы точка рф
Какие символы можно использовать в Инстаграм?
Всего в имени можно использовать три основных символа, это: точка, цифра и нижнее подчеркивание.
Кто проводит суда через мелкое место профессия?
Нужно ли ставить две точки после сокращения в конце предложения?
Точка не ставится в конце предложения после точки, обозначающей сокращение слова. Вопрос № 254621.
Нужно ли ставить точки в резюме?
точка с запятой, если элементы не совсем просты, со знаками препинания внутри, обозначены цифрой с закрывающей скобкой (1)), строчной буквой с закрывающей скобкой (a)), наборным знаком (—) и начинаются со строчной буквы (a), т. точка, если элементы обозначены цифрой с точкой (1.) или прописной буквой с точкой (A.).
Как узнать зарегистрирована ли я на госуслугах?
Самый простой способ узнать, есть ли у вас личный кабинет на госуслугах – попытаться повторить регистрацию. Дело в том, что на одного человека может быть заведен только один личный кабинет. Если вы уже регистрировались на портале, система не пропустит дальнейшую регистрацию и сообщит вам, что введенные данные используются в другом аккаунте.
Как считается точка в электрике?
Согласно ЕСКД, точка, относительно которой выполняются замеры всех напряжений и токов схемы считается общей и обозначается вертикальной чертой, касающейся короткой горизонтальной черточки (иногда от этой черточки отходят короткие линии, наклоненные вправо). Точка же, подлежащая соединению с заземлителем, обозначается так же, с той разницей, что под горизонтальной линией расположены еще две, образующие в сумме с первой треугольник (вторая короче первой, а третья – короче второй).
Как проверить какие устройства подключены к телефону?
Можно ли фоткать незнакомых людей?
Есть общее правило, которое гласит: обнародование и использование изображения гражданина БЕЗ его согласия запрещено. Точка.
Почему в госуслугах пишет что нет свободного времени?
Такое происходит, когда пользователь например записывается на прием к врачу, или на экзамен в ГИБДД, а позже по каким-либо причинам желает перенести прием на другое время. В этом случае поменять время записи, посещения или приема можно, лишь отменив первую запись или заявление и подав новое!
Что значит подтвердить учетную запись в госуслугах на андроиде?
Подтвердить учетную запись на Госуслугах – значит получить статус «Подтвержденная» для своего аккаунта. На портале Госуслуг имеется три типа учетной записи: «Упрощенная». При регистрации нового пользователя на Госуслугах выдается статус учетной записи «Упрощенная». Для этого достаточно ввести минимальные данные о себе: ФИО, e-mail и номер телефона. «Стандартная».
Что за зеленая точка в камере?
В iOS 14 отображается оранжевая точка, оранжевый квадрат или зеленая точка, когда приложение использует микрофон или камеру. Зеленый индикатор означает, что на устройстве iPhone приложение использует камеру либо камеру и микрофон.
Что значит плавающие?
прил. Такой, который плавает, обладает способностью плавать. Плавающая птица. Плавающие льды.
Что значит точка зрения?
Точка зрения — определённый взгляд на вещи, определённое понимание этих вещей. Это может быть точка зрения учёного, исследователя, коллектива, группы или чей-то обет.
Что находится между бровями?
Согласно теории ТКМ между бровями проходят важные меридианы, а в центре находится точка Инь-тан. Найти эту точку очень легко – достаточно определить середину участка между бровей. В самом центре как раз и находится точка Инь-тан.
Сколько можно заработать на кальянной?
В целом, на организации кальянной можно хорошо заработать, учитывая, что маржинальность продукта превышает 400 %. Первоначальные инвестиции при организации заведения составят около 1 000 000 рублей. Точка безубыточности достигается на 6 месяц.
Что значит авторизоваться на госуслугах?
Подтвердить учетную запись на Госуслугах – это значит подтвердить свою личность на сервисе при помощи удостоверяющих государственных документов и предусмотренных сторонних сервисов согласно стандартам ЕСИА.
Что значит желтая точка в правом верхнем углу айфона?
Что за жёлтая точка на iOS? Активно светящаяся точка означает, что в данный момент работает микрофон. Это можно легко проверить, просто набрав чей-нибудь номер или зайдя в приложение Диктофон. Несмотря на её крошечные размеры, ты всегда можешь заметить, когда какое-то приложение решит запустить микрофон.
Что значит заявление зарегистрировано в госуслугах?
Что это значит? Это значит, что ваше заявление зарегистрировано и ждёт электронной очереди на рассмотрение!
Что значит зеленая точка в телеграмме?
В списке диалогов можно заметить зелёную точку возле аватара, которая значит, что пользователь на данный момент находится сети (по аналогии со статусом «в сети» ВКонтакте).
Сколько приносит точка озон?
Доход партнера OZON «Точка продаж»
В первый месяц вы получите комиссию 1 500 000 * 7% = 105 000 руб. А начиная с 4 месяца с этого же объема Вы получите уже 52 500 руб.
Что значит серая точка в Найти айфон?
Нажмите кнопку «Все устройства», затем выберите нужное устройство. Точка, расположенная рядом с названием устройства в списке, обозначает его состояние: Зеленая точка означает, что устройство подключено к сети. Серая точка означает, что устройство отключено от сети.
Что значит мокрая точка при аренде помещения?
Еще раз отметим, что мокрая зона – это помещение или часть помещения с устройством для подачи воды и с гидроизоляцией пола, в котором есть вероятность протечки воды.
Самая высокая точка в Киргизии
Самая глубокая точка мира
Что такое горячая точка в армии?
Горячая точка (горячая точка планеты) — политический фразеологизм, используемый в отношении развязанных вооружённых конфликтов или регионов с высокой степенью риска прямого столкновения между странами. Отмечается, что иногда не просто провести чёткую линию между локальной войной и военным конфликтом, однако исторический опыт показывает, что в отличие от локальных войн военные конфликты характеризуются значительно меньшими силами, вовлеченными в боевые действия, а также меньшей масштабностью и интенсивностью боевых действий.
Что такое горячие точки?
Что ответить на прости если не хочешь прощать?
Так и ответить: «Не прощу. Точка». в любом случае,вежливо..
Что отменяет знак скорости?
Что отменяет перекресток?
Что такое график функции?
Что такое личный кабинет в госуслугах и как туда попасть?
Кратко о личном кабинете портала Госуслуг. Личный кабинет – это виртуальный сервис, который позволяет идентифицировать свою личность при входе на портал Госуслуг.
Что такое логин в госуслугах?
В учётную запись на портале Госуслуг можно войти (авторизоваться) по паролю или с помощью Квалифицированной электронной подписи (КЭП). Чтобы войти по паролю, введите на странице авторизации: 1. Логин — номер мобильного телефона, адрес электронной почты, СНИЛС.
Что лучше нижнее подчеркивание или точка?
Что называется запятая?
Запята́я — знак препинания в русском и многих других языках. Как и точка, иногда используется как десятичный разделитель.
Что обозначает мнение?
Мне́ние — понятие о чём-либо, убеждение, суждение, умозаключение, вывод, точка зрения по теме, в которой невозможно достичь полной объективности, основанное на интерпретации фактов или эмоционального отношения к ним.
Что такое звонок точка ком?
Сервис «Звонок.ком» (Zvonok.com) для автоматического обзвона клиентов с возможностью получить ответ
Что такое электрические точки в доме?
Обычно «Электрическая точка» называют место установки электрических приборов розетка, выключатель, место подключения светильника или люстры и распределительная коробка. Вполне понятно такое название в разговорной речи привязанной к плану, чертежу, эскизу или к проекту, как точка подключения. Откуда взялась привязка «Электрической точки» к расчету стоимости монтажных работ неизвестно. Можно понять электриков работающих по стандартным квартирам многоэтажных домов, которые облегчают себе расчет стоимости работ.
Что является функцией уголовного процесса?
Классическая точка зрения заключается в том, что в уголовном процессе существуют три функции: обвинение (уголовное преследование); защита от обвинения; юстиция (судебное рассмотрение и разрешение уголовного дела по существу).
Что означает оранжевая точка при звонке на айфоне?
Оранжевая точка — она становится свидетельством того, что в фоне находится приложение, у которого может быть доступ к микрофону мобильного устройства.
Что означает зеленый флажок в госуслугах?
Это значит, что ваше заявление зарегистрировано и ждёт электронной очереди на рассмотрение!
Что такое вершина в математике?
Вершина — точка, в которой две кривые, две прямые либо два ребра сходятся. Из этого определения следует, что точка, в которой сходятся два луча, образуя угол, является вершиной, а также ею являются угловые точки многоугольников и многогранников.
Что такое вершина угла?
Что означает серая оценка в электронном дневнике?
«Точка» в электронном дневнике школьника означает:
Что такое точка Б в такси?
Вы будете видеть конечную точку маршрута на экране принятия заказа. Преимущество работает при показателе Активности от 90 баллов.
Что нужно знать про арифметику с плавающей запятой
В далекие времена, для IT-индустрии это 70-е годы прошлого века, ученые-математики (так раньше назывались программисты) сражались как Дон-Кихоты в неравном бою с компьютерами, которые тогда были размером с маленькие ветряные мельницы. Задачи ставились серьезные: поиск вражеских подлодок в океане по снимкам с орбиты, расчет баллистики ракет дальнего действия, и прочее. Для их решения компьютер должен оперировать действительными числами, которых, как известно, континуум, тогда как память конечна. Поэтому приходится отображать этот континуум на конечное множество нулей и единиц. В поисках компромисса между скоростью, размером и точностью представления ученые предложили числа с плавающей запятой (или плавающей точкой, если по-буржуйски).
Арифметика с плавающей запятой почему-то считается экзотической областью компьютерных наук, учитывая, что соответствующие типы данных присутствуют в каждом языке программирования. Я сам, если честно, никогда не придавал особого значения компьютерной арифметике, пока решая одну и ту же задачу на CPU и GPU получил разный результат. Оказалось, что в потайных углах этой области скрываются очень любопытные и странные явления: некоммутативность и неассоциативность арифметических операций, ноль со знаком, разность неравных чисел дает ноль, и прочее. Корни этого айсберга уходят глубоко в математику, а я под катом постараюсь обрисовать лишь то, что лежит на поверхности.
1. Основы
Множество целых чисел бесконечно, но мы всегда можем подобрать такое число бит, чтобы представить любое целое число, возникающее при решении конкретной задачи. Множество действительных чисел не только бесконечно, но еще и непрерывно, поэтому, сколько бы мы не взяли бит, мы неизбежно столкнемся с числами, которые не имеют точного представления. Числа с плавающей запятой — один из возможных способов предсталения действительных чисел, который является компромиссом между точностью и диапазоном принимаемых значений.
Число с плавающей запятой состоит из набора отдельных разрядов, условно разделенных на знак, экспоненту порядок и мантиссу. Порядок и мантисса — целые числа, которые вместе со знаком дают представление числа с плавающей запятой в следующем виде:
Математически это записывается так:
Основание определяет систему счисления разрядов. Математически доказано, что числа с плавающей запятой с базой B=2 (двоичное представление) наиболее устойчивы к ошибкам округления, поэтому на практике встречаются только базы 2 и, реже, 10. Для дальнейшего изложения будем всегда полагать B=2, и формула числа с плавающей запятой будет иметь вид:
Что такое мантисса и порядок? Мантисса – это целое число фиксированной длины, которое представляет старшие разряды действительного числа. Допустим наша мантисса состоит из трех бит (|M|=3). Возьмем, например, число «5», которое в двоичной системе будет равно 1012. Старший бит соответствует 2 2 =4, средний (который у нас равен нулю) 2 1 =2, а младший 2 0 =1. Порядок – это степень базы (двойки) старшего разряда. В нашем случае E=2. Такие числа удобно записывать в так называемом «научном» стандартном виде, например «1.01e+2». Сразу видно, что мантисса состоит из трех знаков, а порядок равен двум.
Допустим мы хотим получить дробное число, используя те же 3 бита мантиссы. Мы можем это сделать, если возьмем, скажем, E=1. Тогда наше число будет равно
2 = 10 (в двоичной системе) = 1.000e+1 = 0.100e+2 = 0.010e+3. (E=1, E=2, E=3 соответственно)
Обратите внимание, что одно и то же число имеет несколько представлений. Это не удобно для оборудования, т.к. нужно учитывать множественность представлния при сравнении чисел и при выполнении над ними арифметических операций. Кроме того, это не экономично, поскольку число представлений — конечное, а повторения уменьшают множество чисел, которые вообще могут быть представлены. Поэтому уже в самых первых машинах начали использовать трюк, делая первый бит мантиссы всегда положительным. Такое предаставление назвали нормализованным.
Это экономит один бит, так как неявную единицу не нужно хранить в памяти, и обеспечивает уникальность представления числа. В нашем примере «2» имеет единственное нормализованное представление («1.000e+1»), а мантисса хранится в памяти как «000», т.к. старшая единица подразумевается неявно. Но в нормализованном представлении чисел возникает новая проблема — в такой форме невозможно представить ноль.
Строго говоря, нормализованное число имеет следующий вид:
Качество решения задач во многом зависит от выбора представления чисел с плавающей запятой. Мы плавно подошли к проблеме стандартизации такого представления.
2. Немного истории
В 60-е и 70-е годы не было единого стандарта представления чисел с плавающей запятой, способов округления, арифметических операций. В результате программы были крайне не портабельны. Но еще большей проблемой было то, что у разных компьютеров были свои «странности» и их нужно было знать и учитывать в программе. Например, разница двух не равных чисел возвращала ноль. В результате выражения «X=Y» и «X-Y=0» вступали в противоречие. Умельцы обходили эту проблему очень хитрыми трюками, например, делали присваивание «X=(X-X)+X» перед операциями умножения и деления, чтобы избежать проблем.
Инициатива создать единый стандарт для представления чисел с плавающей запятой подозрительно совпала с попытками в 1976 году компанией Intel разработать «лучшую» арифметику для новых сопроцессоров к 8086 и i432. За разработку взялись ученые киты в этой области, проф. Джон Палмер и Уильям Кэхэн. Последний в своем интервью высказал мнение, что серьезность, с которой Intel разрабатывала свою арифметику, заставила другие компании объединиться и начать процесс стандартизации.
Все были настроены серьезно, ведь очень выгодно продвинуть свою архитектуру и сделать ее стандартной. Свои предложения представили компании DEC, National Superconductor, Zilog, Motorola. Производители мейнфреймов Cray и IBM наблюдали со стороны. Компания Intel, разумеется, тоже представила свою новую арифметику. Авторами предложенной спецификации стали Уильям Кэхэн, Джероми Кунен и Гарольд Стоун и их предложение сразу прозвали «K-C-S».
Практически сразу же были отброшены все предложения, кроме двух: VAX от DEC и «K-C-S» от Intel. Спецификация VAX была значительно проще, уже была реализована в компьютерах PDP-11, и было понятно, как на ней получить максимальную производительность. С другой стороны в «K-C-S» содержалось много полезной функциональности, такой как «специальные» и «денормализованные» числа (подробности ниже).
В «K-C-S» все арифметические алгоритмы заданы строго и требуется, чтобы в реализации результат с ними совпадал. Это позволяет выводить строгие выкладки в рамках этой спецификации. Если раньше математик решал задачу численными методами и доказывал свойства решения, не было никакой гарантии, что эти свойства сохранятся в программе. Строгость арифметики «K-C-S» сделала возможным доказательство теорем, опираясь на арифметику с плавающей запятой.
Компания DEC сделала все, чтобы ее спецификацию сделали стандартом. Она даже заручилась поддержкой некоторых авторитетных ученых в том, что арифметика «K-C-S» в принципе не может достигнуть такой же производительности, как у DEC. Ирония в том, что Intel знала, как сделать свою спецификацию такой же производительной, но эти хитрости были коммерческой тайной. Если бы Intel не уступила и не открыла часть секретов, она бы не смогла сдержать натиск DEC.
Подробнее о баталиях при стандартизации смотрите в интервью профессора Кэхэна, а мы рассмотрим, как выглядит представление чисел с плавающей запятой сейчас.
3. Представление чисел с плавающей запятой сегодня
Разработчики «K-C-S» победили и теперь их детище воплотилось в стандарт IEEE754. Числа с плавающей запятой в нем представлены в виде знака (s), мантиссы (M) и порядка (E) следующим образом:
Замечание. В новом стандарте IEE754-2008 кроме чисел с основанием 2 присутствуют числа с основанием 10, так называемые десятичные (decimal) числа с плавающей запятой.
Чтобы не загромождать читателя чрезмерной информацией, которую можно найти в Википедии, рассмотрим только один тип данных, с одинарной точностью (float). Числа с половинной, двойной и расширенной точностью обладают теми же особенностями, но имеют другой диапазон порядка и мантиссы. В числах одинарной точности (float/single) порядок состоит из 8 бит, а мантисса – из 23. Эффективный порядок определяется как E-127. Например, число 0,15625 будет записано в памяти как
Рисунок взят из Википедии
3.1 Специальные числа: ноль, бесконечность и неопределенность
Неопределенность или NaN (от not a number) – это представление, придуманное для того, чтобы арифметическая операция могла всегда вернуть какое-то не бессмысленное значение. В IEEE754 NaN представлен как число, в котором E=Emax+1, а мантисса не нулевая. Любая операция с NaN возвращает NaN. При желании в мантиссу можно записывать информацию, которую программа сможет интерпретировать. Стандартом это не оговорено и мантисса чаще всего игнорируется.
Вернемся к примеру. Наш Emin=-1. Введем новое значение порядка, E=-2, при котором числа являются денормализованными. В результате получаем новое представление чисел:
Интервал от 0 до 0,5 заполняют денормализованные числа, что дает возможность не проваливаться в 0 рассмотренных выше примерах (0,5-0,25 и 1,5-1,25). Это сделало представление более устойчиво к ошибкам округления для чисел, близких к нулю.
Но роскошь использования денормализованного представления чисел в процессоре не дается бесплатно. Из-за того, что такие числа нужно обрабатывать по-другому во всех арифметических операциях, трудно сделать работу в такой арифметике эффективной. Это накладывает дополнительные сложности при реализации АЛУ в процессоре. И хоть денормализованные числа очень полезны, они не являются панацеей и за округлением до нуля все равно нужно следить. Поэтому эта функциональность стала камнем преткновения при разработке стандарта и встретила самое сильное сопротивление.
3.4 Очередность чисел в IEEE754
Одна из удивительных особенностей представления чисел в формате IEEE754 состоит в том, что порядок и мантисса расположены друг за другом таким образом, что вместе образуют последовательность целых чисел
4.2 Неассоциативность арифметических операций
В арифметике с плавающей запятой правило (a*b)*c = a*(b*c) не выполняется для любых арифметических операций. Например,
Допустим у нас есть программа суммирования чисел.
Некоторые компиляторы по умолчанию могут переписать код для использования нескольких АЛУ одновременно (будем считать, что n делится на 2):
Так как операции суммирования не ассоциативны, эти две программы могут выдать различный результат.
4.3 Числовые константы
Помните, что не все десятичные числа имеют двоичное представление с плавающей запятой. Например, число «0,2» будет представлено как «0,200000003» в одинарной точности. Соответственно, «0,2 + 0,2 ≈ 0,4». Абсолютная погрешность в отдельном
случае может и не высока, но если использовать такую константу в цикле, можем получить накопленную погрешность.
4.4 Выбор минимума из двух значений
4.5 Сравнение чисел
Очень распространенная ошибка при работе с float-ами возникает при проверке на равенство. Например,
Ошибка здесь, во-первых, в том, что 0,2 не имеет точного двоичного представления, а во-вторых 0,2 – это константа двойной точности, а переменная fValue – одинарной, и никакой гарантии о поведении этого сравнения нет.
Лучший, но все равно ошибочный способ, это сравнивать разницу с допустимой абсолютной погрешностью:
Недостаток такого подхода в том, что погрешность представления числа увеличивается с ростом самого этого числа. Так, если программа ожидает «10000», то приведенное равенство не будет выполняться для ближайшего соседнего числа (10000,000977). Это особенно актуально, если в программе имеется преобразование из одинарной точности в двойную.
Выбрать правильную процедуру сравнения сложно и заинтересованных читателей я отсылаю к статье Брюса Доусона. В ней предлагается сравнивать числа с плавающей запятой преобразованием к целочисленной переменной. Это — лучший, хотя и не портабельный способ:
5. Проверка полноты поддержки IEE754
Думаете, что если процессоры полностью соответствуют стандарту IEEE754, то любая программа, использующая стандартные типы данных (такие как float/double в Си), будет выдавать один и тот же результат на разных компьютерах? Ошибаетесь. На портабельность и соответствие стандарту влияет компилятор и опции оптимизации. Уильям Кэхэн написал программу на Си (есть версия и для Фортрана), которая позволяет проверить удовлетворяет ли связка «архитектура+компилятор+опции» IEEE754. Называется она «Floating point paranoia» и ее исходные тексты доступны для скачивания. Аналогичная программа доступна для GPU. Так, например, компилятор Intel (icc) по умолчанию использует «расслабленную» модель IEEE754, и в результате не все тесты выполняются. Опция «-fp-model precise» позволяет компилировать программу с точным соответствием стандарту. В компиляторе GCC есть опция «-ffast-math», использование которой приводит к несоответствию IEEE754.
Заключение
Напоследок поучительная история. Когда я работал над тестовым проектом на GPU, у меня была последовательная и параллельная версия одной программы. Сравнив время выполнения, я был очень обрадован, так как получил ускорение в 300 раз. Но позже оказалось, что вычисления на GPU «разваливались» и обращались в NaN, а работа с ними в GPU была быстрее, чем с обычными числами. Интересно было другое — одна и та же программа на эмуляторе GPU (на CPU) выдавала корректный результат, а на самом GPU – нет. Позже оказалось, что проблема была в том, что этот GPU не поддерживал полностью стандарт IEEE754 и прямой подход не сработал.
Сейчас арифметика с плавающей запятой почти совершенна. Практически всегда наивный подход сработает, и программа, не учитывающая все ее особенности, выдаст правильный результат, а описанные подводные камни касаются только экзотических случаев. Но нужно всегда оставаться бдительным: в таком вопросе как компьютерная математика легко наступить на грабли.