Skip to content

Instantly share code, notes, and snippets.

Created August 30, 2017 17:57
Show Gist options
  • Save anonymous/c2c2bca70f1f3a9c5a60389be23e9dd6 to your computer and use it in GitHub Desktop.
Save anonymous/c2c2bca70f1f3a9c5a60389be23e9dd6 to your computer and use it in GitHub Desktop.
Значение после запятой

Значение после запятой


Значение после запятой



Как округлить число в Excel
Число с плавающей запятой
Excel works and solves


























Только полноправные пользователи могут оставлять комментарии. TM Feed Хабрахабр Geektimes Тостер Мой круг Фрилансим. Хабрахабр Публикации Пользователи Хабы Компании Песочница. В далекие времена, для IT-индустрии это е годы прошлого века, ученые-математики так раньше назывались программисты сражались как Дон-Кихоты в неравном бою с компьютерами, которые тогда были размером с маленькие ветряные мельницы. Для их решения компьютер должен оперировать действительными числами, которых, как известно, континуум, тогда как память конечна. Поэтому приходится отображать этот континуум на конечное множество нулей и единиц. В поисках компромисса между скоростью, размером и точностью представления ученые предложили числа с плавающей запятой или плавающей точкой, если по-буржуйски. Арифметика с плавающей запятой почему-то считается экзотической областью компьютерных наук, учитывая, что соответствующие типы данных присутствуют в каждом языке программирования. Я сам, если честно, никогда не придавал особого значения компьютерной арифметике, пока решая одну и ту же задачу на CPU и GPU получил разный результат. Оказалось, что в потайных углах этой области скрываются очень любопытные и странные явления: Корни этого айсберга уходят глубоко в математику, а я под катом постараюсь обрисовать лишь то, что лежит на поверхности. Основы Множество целых чисел бесконечно, но мы всегда можем подобрать такое число бит, чтобы представить любое целое число, возникающее при решении конкретной задачи. Множество действительных чисел не только бесконечно, но еще и непрерывно, поэтому, сколько бы мы не взяли бит, мы неизбежно столкнемся с числами, которые не имеют точного представления. Числа с плавающей запятой — один из возможных способов предсталения действительных чисел, который является компромиссом между точностью и диапазоном принимаемых значений. Число с плавающей запятой состоит из набора отдельных разрядов, условно разделенных на знак, экспоненту порядок и мантиссу. Порядок и мантисса — целые числа, которые вместе со знаком дают представление числа с плавающей запятой в следующем виде: Математически это записывается так: Основание определяет систему счисления разрядов. Мантисса — это целое число фиксированной длины, которое представляет старшие разряды действительного числа. Порядок — это степень базы двойки старшего разряда. Сразу видно, что мантисса состоит из трех знаков, а порядок равен двум. Допустим мы хотим получить дробное число, используя те же 3 бита мантиссы. Два других разряда, расположенных правее после запятой , обеспечивают вклад 2 E-1 и 2 E-2 2 0 и 2 -1 соответственно. Очевидно, что регулируя E одно и то же число можно представить по-разному. Это не удобно для оборудования, так как нужно учитывать множественность представлния при сравнении чисел и при выполнении над ними арифметических операций. Кроме того, это не экономично, поскольку число представлений — конечное, а повторения уменьшают множество чисел, которые вообще могут быть представлены. Поэтому уже в самых первых машинах начали использовать трюк, делая первый бит мантиссы всегда положительным. Такое предаставление назвали нормализованным. Это экономит один бит, так как неявную единицу не нужно хранить в памяти, и обеспечивает уникальность представления числа. Но в нормализованном представлении чисел возникает новая проблема — в такой форме невозможно представить ноль. Строго говоря, нормализованное число имеет следующий вид: Качество решения задач во многом зависит от выбора представления чисел с плавающей запятой. Мы плавно подошли к проблеме стандартизации такого представления. Немного истории В е и е годы не было единого стандарта представления чисел с плавающей запятой, способов округления, арифметических операций. В результате программы были крайне не портабельны. Например, разница двух не равных чисел возвращала ноль. За разработку взялись ученые киты в этой области, проф. Джон Палмер и Уильям Кэхэн. Последний в своем интервью высказал мнение, что серьезность, с которой Intel разрабатывала свою арифметику, заставила другие компании объединиться и начать процесс стандартизации. Все были настроены серьезно, ведь очень выгодно продвинуть свою архитектуру и сделать ее стандартной. Свои предложения представили компании DEC, National Superconductor, Zilog, Motorola. Производители мейнфреймов Cray и IBM наблюдали со стороны. Компания Intel, разумеется, тоже представила свою новую арифметику. Практически сразу же были отброшены все предложения, кроме двух: Спецификация VAX была значительно проще, уже была реализована в компьютерах PDP, и было понятно, как на ней получить максимальную производительность. Это позволяет выводить строгие выкладки в рамках этой спецификации. Если раньше математик решал задачу численными методами и доказывал свойства решения, не было никакой гарантии, что эти свойства сохранятся в программе. Компания DEC сделала все, чтобы ее спецификацию сделали стандартом. Ирония в том, что Intel знала, как сделать свою спецификацию такой же производительной, но эти хитрости были коммерческой тайной. Если бы Intel не уступила и не открыла часть секретов, она бы не смогла сдержать натиск DEC. Подробнее о баталиях при стандартизации смотрите в интервью профессора Кэхэна , а мы рассмотрим, как выглядит представление чисел с плавающей запятой сейчас. Числа с плавающей запятой в нем представлены в виде знака s , мантиссы M и порядка E следующим образом: В новом стандарте IEE кроме чисел с основанием 2 присутствуют числа с основанием 10, так называемые десятичные decimal числа с плавающей запятой. Чтобы не загромождать читателя чрезмерной информацией, которую можно найти в Википедии , рассмотрим только один тип данных, с одинарной точностью float. Числа с половинной, двойной и расширенной точностью обладают теми же особенностями, но имеют другой диапазон порядка и мантиссы. Эффективный порядок определяется как E Например, число 0, будет записано в памяти как Рисунок взят из Википедии В этом примере: Информационная безопасность 2,4k авторов , 6,4k публикаций. Open source 1k авторов , 2,3k публикаций. Высокая производительность авторов , 1,2k публикаций. Программирование 2,9k авторов , 6,5k публикаций. Разработка систем передачи данных 62 автора , публикаций. Разработка под Linux автор , публикация. Алгоритмы 1,3k авторов , 2,3k публикаций. Системное программирование авторов , публикации. Тестирование веб-сервисов автор , публикаций. Анализ и проектирование систем авторов , публикации. Добавить в закладки Руслан Ющенко yruslan карма. В принципе, достаточно доходчиво объяснено. А то оооочень много личностей даже понятия не имеют что там внутри double. Буду теперь новичкам этот пост показывать. Очень интересный пост, очень понятно объясняется и главное по полочкам. Но все равно силился час пока прочел и смог запомнить хотя бы часть. Огромное спасибо за пост! Мне всегда казалось, что Floating Point всеже подразумевает плавающую точку. В смысле термин буржуйский и перевод нужен нормальный, а то както в шок вводит немного. Я консультировался с разработчиками стандартов в Украине. Последний мне показался самобытнее и ближе к традиции. Но на то вы и автор, чтобы решать самостоятельно. Ну это как бы не для лингвистов перевод. А для программистов, которые ещё со времён совка называем это арифметикой с плавающей запятой. Давайте ещё команды ассемблера на русский язык, корректно переведём. НЛО прилетело и опубликовало эту надпись здесь. У них запятая иногда — разделитель троек десятичных разрядов. У нас же запятая отделяет дробную часть. Насколько мне известно, до 10 10, числа пишутся слитно. Надо на Хабре добавить мегатонны смайликов, как в некоторых развлекательных блогах, и вообще можно будет не думать, что написать в комментарии. Это поменьше чем континуум. Множество действительных чисел, конечно. Только числа с фиксированой запятой. Иначе на огруглениях можно много потерять и потом баланс не сойдется. Тем более, если мы будем считать миллиарды, можем потерять не только копейки, но и рубли. Соответственно, при счёте миллиардов мы не только не потеряем ни копейки, но даже учтём миллиардные доли копейки. Они помнят по 19 знаков. Ну то есть, если считать миллиарды, то учтём только лишь стотысячные доли копейки, какая жалость. Все зависит от того, что мы с этими числами будем делать. Кроме округления при представлении источником ошибок являются арифметические операции, которые тоже вносят погрешность. Во-первых, это зависит от рода операций, а во-вторых — погрешности не растут линейно. Если вы имеете ввиду сложение близких по порядку чисел, то есть определённых с одинаковой абсолютной погрешностью, то абсолютная погрешность их суммы будет в sqrt миллионов раз больше. Иногда они имеют свойство перемножаться, то есть расти экспоненциально: Хорошо, предположим что ваш тезис о недопустимости финансовых расчетов с помощью арифметики с плавающей точкой верен. А какие в таком случае альтернативы? Если имеется счет, на который была внесена сумма в ххх. Посчитайте это без использования плавающей точки, перемножьте на количество клиентов в банке и сравните получившиеся погрешности. На самом деле главный затык даже не в округлении как таковом, а именно в плавающей точке и в ограниченности длины мантиссы. При добавлении малых величин к большим, младшие разряды могут банально потеряться, так как просто не влезут в мантиссу. При малых K нет никакой разницы, суммировать от меньшего к большему или от большего к меньшему. Но как только K cтановится достаточно большим, разница становится заметной на глаз. Происходит это вот почему: При подсчёте sum1 в неё сразу кладётся 1, фиксируя экспоненту, после чего начинают добавляться всё более мелкие числа. При подсчёте sum2, напротив, сначала берутся более мелкие числа, которые накапливаются постепенно, отбрасывая младшие разряды по одному по мере роста экспоненты. Считать и целую, и дробную части как отдельные целые сбрасывая определённый старший разряд из копеек в рубли переполнении. Бухгалтерские рассчёты традиционно организованы как операции с фиксированной запятой. Фиксируя запятую, мы фиксируем экспоненту. Фиксированная запятая означает фиксированную абсолютную погрешность. Мы не приобретаем дополнительной точности при округлении. Напротив, для достаточно мелких но ещё представимых чисел округление приводит к катастрофическому росту относительной погрешности. Как вы понимаете, этого не происходит для чисел с плавающей запятой, кроме денормализованных, которые фактически есть числа с фиксированной запятой. Для организации фиксированной запятой используется обычная целочисленная арифметика, которая гораздо проще, а значит надёжнее и быстрее. Запятая фактически появляется только при выводе чисел на экран. Этого вполне достаточно для бухгалтерии. Там очень сильно ограничен диапазон чисел, с которыми они работают, и большой диапазон чисел, который даёт плавающая запятая, просто не нужен. А не нужной им точностью они готовы пожертвовать в пользу надёжности и скорости вспомните, всё это образовалось полвека назад, когда компьютеры были большими. NET можно использовать decimal для рассчетов с деньгами. Вы правы, денормализованные вместо субнормальные числа — правильный термин. Всегда было гораздо интереснее — как именно нужно изменить знакомые формулы, чтобы компьютер с плавающей запятой считал по ним точнее ну хотя бы вообще получал хоть что-то похожее. А то есть вот такая формула для синуса ряд Маклорена: Радиус сходимости — бесконечность. Только вот если считать с её помощью на компьютере скажем, заканчивать, когда очередное слагаемое меньше затребованной погрешности , чуть отойдёшь от нуля — и всё, получаются совершенно несуразные результаты…. Простого ответа нет — есть целая теория как делать формулы более устойчивыми к арифметике с плавающей запятой, основанная на анализе погрешности и алгебре. Несколько примеров с доказательствами есть в этой книжке. Я как бы намекаю, как можно развивать тему, начатую этой статьей: От людей, занимающихся мат моделированием на физ-техе, слышал, что Fortran используется для этих целей как раз потому, что на всех платформах выдаёт один и тот же результат для операций с плавающей точкой. Это его главное преимущество в глазах учёных перед другими языками. Однако из ваших слов следует, что это не так. Фортран — компилируемый, значит в итоге получим машинный код, который выполняется на конкретной машине, у которой конкретная архитектура АЛУ, либо если оное отсутствует, какая-то конкретная библиотека эмуляции арфиметики. Вот и получили запвисимость от реализации. Фортран используется исключительно по традиции: В качестве примера вспоминается двухтомник Хайрера, Нёрсета и Виннера про численное решение систем дифференциальных уравнений с упоминанием исходных текстов знаменитых и нашумевших в своё время программ Дормана-Принса есть куча самих этих программ и библиотек на Форнтране. Хотя некоторые библиотеки в принципе можно скомпоновать с модулями, написанными на других языках, есть и такие, которые не скомпонуешь. Уж больно статья хорошая, хочется, чтобы даже досадных опечаток в ней не было. Также стандарт определяет два типа NaN: Первый молча передает значение NaN в последующие вычисления, в то время как операции над вторым приводят к исключению. Про денормализованные числа полезно знать, что работа с ними, даже если она реализована в железе, как правило, выполняется гораздо медленнее в десятки раз , чем с нормализованными числами. Поэтому в приложениях, нечувствительных к точности, но где важно быстродействие 3D графика, обработка сигналов , зачастую используется режим flush-to-zero. Многие FPU такой режим поддерживают аппаратно. Это так, небольшие дополнения. Что такое субнормальные денормализованные subnormal числа рассмотрим на простом примере. В этом случае получим 16 чисел: В вашем примере длина мантиссы 2 бита. Чтобы найти расстояние между двумя float в ulp, нужно одно перевести в другое и это делается через 0x - aInt для отрицательных float. Большое спасибо за содержательную критику! Я внес исправления в программу, но теперь возникает вопрос с исключением. Не возникнет ли целочисленное переполнение в этом случае? И не приведет ли это к замедлению программы? Будет время, сосредоточусь и проверю. Целочисленные операции не вызывают исключения при переполнении по крайней мере на архитектурах, где описываемый трюк работает и соответственно не будет никакого замедления, просто результат обрежется. В нашем случае все еще проще, результат который возвращает abs может не поместиться в диапазон положительных значений int, но unsigned int точно хватит. Но вот операции сравнения уже различны. Для одного и того же бинарного значения в регистре разные операции сравнения интерпретируют его как знаковое или беззнаковое. Какую операцию использовать мы указываем компилятору через тип переменной кстати интересно почему abs возвращает int а не unsigned. ЗЫ все это достаточно сложно прочитать с листа. Легче всего написать тестовую программу. А вот мы сейчас это все будем читать, долго и вдумчиво. И наверное даже отправим на Киндл, да. А автору поставим плюс в карму фигурально и буквально, ибо верной дорогой идет. Сейчас при приеме вычислительных техзаданий появилась новая мода как Bitwise Reproducibility, это полная ж для оптимизирующих компиляторов, которые любят менять местами порядок выполнения операций. А переполнение при том же сложении — это заранее оговоренная в документации особенность работы конкретного процессора. Окей, как заставить один из общеупотребимых компиляторов проверять этот флаг? NaN с любым логическим выражением вернет ложь. На самом деле операция с NaN не возвращает ложь. Это компилятор так трактует. Не могу сказать по поводу SSE, но на FPU операция сравнения возвращает 3 флага: Я понимаю, топик про float, но, взглянув на картинку, не могу удержаться. Один дополнительный бит для поля степени. Иначе надо было бы выделять бит для знака степени. Извините за тупость и глупый вопрос, но разложите кто-нибудь более детально формулу получения из 1. Очень хочется разобраться во всем, но своих мозгов что-то не хватает…. Метки лучше разделять запятой. Сейчас Вчера Неделя GitLab CI: Первая российская материнская плата массового сегмента 27,1k Интересные публикации Хабрахабр Geektimes. Запуск Java классов и JAR-ов не по учебнику. Критическая уязвимость механизма аутентификации BIND позволяет похищать и изменять DNS-записи серверов. Во льдах Плавучего Континента: Новый подход к кэшированию процессора GT. Стабильность нейтрона в атомном ядре GT. Разделы Публикации Хабы Компании Пользователи Песочница. Информация О сайте Правила Помощь Соглашение Конфиденциальность. Услуги Реклама Тарифы Контент Семинары.


Программа Microsoft Excel: округление чисел


Программа Microsoft Excel работает, в том числе, и с числовыми данными. При выполнении деления или работе с дробными числами, программа производит округление. Это связано, прежде всего, с тем, что абсолютно точные дробные числа редко когда бывают нужны, но оперировать громоздким выражением с несколькими знаками после запятой не очень удобно. Кроме того, существуют числа, которые в принципе точно не округляются. Но, в то же время, недостаточно точное округление может привести к грубым ошибкам в ситуациях, где требуется именно точность. К счастью, в программе Microsoft Excel имеется возможность самим пользователям устанавливать, как будут округляться числа. Все числа, с которыми работает программа Microsoft Excel, делятся на точные и приближенные. В памяти хранятся числа до 15 разряда, а отображаются до того разряда, который укажет сам пользователь. Но, при этом, все расчеты выполняются согласно хранимых в памяти, а не отображаемых на мониторе данным. С помощью операции округления, Microsoft Excel отбрасывает некоторое количество знаков после запятой. В Excel применяется общепринятый способ округления, когда число меньше 5 округляется в меньшую сторону, а больше или равно 5 — в большую сторону. При этом, будет округляться только отображаемое число, но для вычислений, при необходимости будут задействованы до 15 разрядов чисел. Также можно выставить округление с помощью настроек формата ячеек. Если формат данных указан не числовой, то нужно выбрать именно числовой формат, иначе вы не сможете регулировать округление. Если в предыдущих случаях, устанавливаемые параметры влияли только на внешнее отображения данных, а при расчетах использовались более точные показатели до 15 знака , то сейчас мы расскажем, как изменить саму точность расчетов. Открывается окно параметров Excel. Настройки в данном бока применяются ни к одному листу, а ко всей книги в целом, то есть ко всему файлу. Теперь при расчете данных будет учитываться отображаемая величина числа на экране, а не та, которая хранится в памяти Excel. Настройку же отображаемого числа можно провести любым из двух способов, о которых мы говорили выше. То есть, если вы, например, хотите округлить число 2, до трех разрядов, то применяете функцию ОКРУГЛ 2,;3. На выходе получается число 2, Для функций ОКРУГЛТ, ОКРВВЕРХ и ОКРВНИЗ применяется такая формула округления: Например, чтобы округлить число 11 до ближайшего числа кратного 2, вводим функцию ОКРУГЛТ 11;2. На выходе получается число Функции ОТБР, ЧЕТН и НЕЧЕТ используют следующий формат: Для того, чтобы округлить число 17 до ближайшего четного применяем функцию ЧЕТН Функцию можно вводить, как в ячейку, так и в строку функций, предварительно выделив ту ячейку, в которой она будет находиться. Существует и несколько другой способ введения функций округления. Его особенно удобно использовать, когда есть таблица со значениями, которые нужно преобразовать в округленные числа в отдельном столбике. Далее, в открывшемся списке выбираем нужную функцию, например ОКРУГЛ. После этого, открывается окно аргументов функции. Окно аргументов функции сворачивается. Теперь нужно кликнуть по самой верхней ячейке столбца, данные которого мы собираемся округлить. После того, как значение занесено в окно, кликаем по кнопке справа от этого значения. Опять открывается окно аргументов функции. Как видим, число округлилось. Для того, чтобы таким же образом округлить и все другие данные нужного столбца, наводим курсор на нижний правый угол ячейки с округленным значением, жмем на левую кнопку мыши, и протягиваем её вниз до конца таблицы. Как видим, существуют два основных способа округлить видимое отображение числа: Кроме того, можно изменить и округление реально рассчитываемых данных. Это также можно сделать двумя способами: Выбор конкретного способа зависит от того, собираетесь ли вы применять подобный вид округления для всех данных в файле, или только для определенного диапазона ячеек. Оставьте свое мнение Отменить комментарий. Уведомить меня о поступлении ответа на E-mail. Меню Главная О нас Присоединяйтесь к нам. Содержание Хранение чисел в памяти Excel Округление с помощью кнопок на ленте Округление через формат ячеек Установка точности расчетов Применение функций. Мы рады, что смогли помочь Вам в решении проблемы. В свою очередь, Вы тоже можете нам помочь , даже незначительно. Отблагодарите автора, поделитесь статьей в социальных сетях. Давайте решим все проблемы на Вашем компьютере? Расчет НДС в Microsoft Excel Конвертирование HTML в форматы Microsoft Excel Установка тире в Microsoft Excel. Оставьте свое мнение Отменить комментарий Уведомить меня о поступлении ответа на E-mail. У вас картинки не загружаются при включен Леся У меня при включенном Flash не открываются изображения и ро Получилось установить официальную прошивку, ес Эта функция есть во многих он Toynstoyn Где мне взять рабочую центр темы для леново? Работаем в программах Adobe Flash Player AutoCAD Avast BlueStacks Microsoft Excel Google Chrome Hamachi Internet Explorer iTunes Mozilla Firefox Opera Outlook Photoshop PowerPoint Skype Sony Vegas Steam UltraISO uTorrent Microsoft Word Торрент клиенты Яндекс Браузер Яндекс Диск Расширения для браузеров Другие программы. Windows XP Windows 7 Windows 8 Windows 10 Выбираем программу Обзоры программ Работа с форматами файлов. Вконтакте Яндекс AliExpress Apple ID Avito Facebook Gmail Рамблер почта Google Instagram Twitter Webmoney YouTube. SSD диск Жесткий диск Карта памяти Процессор Видеокарта Флешка Прошивка устройств Драйвера.


Телефоны с черным списком модели телефонов
Как почистить кишечник черносливом
Подтекает лобовое стекло сверху что делать
Оформлять продажу машины у нотариуса
Правила игры фрукто 10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment