Ошибка в формате десятичного числа

  • Аватар гостей

    • Спасибо: 28

    Проверяемая форма — РСВ-1
    в протоколе следующее:
    ***Ошибка при проверке 1-го документа РАСЧЕТ_ПО_СТРАХОВЫМ_ВЗНОСАМ_НА_ОПС_И_ОМС_ПЛАТЕЛЬЩИ КАМИ_ПРОИЗВОДЯЩИМИ_ВЫПЛАТЫ_ФЛ по схеме…
    Причина Ошибка в формате десятичного числа.
    Содержимое элемента <ОПСстраховаяЧасть> не соответствует нужному типу.
    Источник <ОПСстраховаяЧасть></ОПСстраховаяЧасть>

    ошибка касается значений всей 100ой строки.
    там у нас по нулям должно быть. НО! нули программа не принимает, пустые значения тоже — пробовал вбивать вручную в xml

    что там должно быть чтоб программа приняла отчет???

    Метки:

    Нет



    • Спасибо



      0

  • Местный

    • Регистрация: 16.03.2010
    • Сообщений: 2023
    • Спасибо: 185

    Либо так <ОПСстраховаяЧасть>0</ОПСстраховаяЧасть>
    Либо так <ОПСстраховаяЧасть>0.00</ОПСстраховаяЧасть>

    Что за программа?



    • Спасибо



      0

    Комментарий

  • Новичок

    • Регистрация: 20.07.2010
    • Сообщений: 4
    • Спасибо: 0

    CheckXML от 14.07 см сабж



    • Спасибо



      0

    Комментарий

  • Новичок

    • Регистрация: 20.07.2010
    • Сообщений: 4
    • Спасибо: 0

    Сообщение от IgorAV

    Посмотреть сообщение

    Либо так <ОПСстраховаяЧасть>0</ОПСстраховаяЧасть>
    Либо так <ОПСстраховаяЧасть>0.00</ОПСстраховаяЧасть>

    ни так ни так ей не нравится!!!
    более того пробовал такие варианты: 0.0 0,00 0,0
    ту же ошибку пишет в протоколе
    чего ей нужно вообще, что там должно быть??? (вопрос к разработчику)



    • Спасибо



      0

    Комментарий

  • lubezniy

    • Регистрация: 01.02.2007
    • Сообщений: 3914
    • Спасибо: 88

    Дайте, пожалуйста, конкретную ошибку при значении 0.00 . В строке 100 за 2010 год других значений не предусматривается.



    • Спасибо



      0

    Комментарий

  • Новичок

    • Регистрация: 20.07.2010
    • Сообщений: 4
    • Спасибо: 0

    lubezniy, значение 0.00 :
    Причина Ошибка в формате десятичного числа.
    Содержимое элемента <ОПСстраховаяЧасть> не соответствует нужному типу.
    Источник <ОПСстраховаяЧасть></ОПСстраховаяЧасть>

    извернулся таки я: через импорт экспорт двух программ сформировал xml
    теперь такая ошибка:
    Причина Нарушено ограничение на минимально допустимую длину.
    Длина текстового содержимого элемента <НаименованиеУдостоверяющего> меньше величины, минимально допустимой для данного элемента.
    Источник <НаименованиеУдостоверяющего></НаименованиеУдостоверяющего>

    это поле ДокументПодтверждающийПолномочияПредставителя
    у нас там должно быть пусто. так вот на пустое значение он такую ошибку выдает.



    • Спасибо



      0

    Комментарий

  • lubezniy

    • Регистрация: 01.02.2007
    • Сообщений: 3914
    • Спасибо: 88

    Сообщение от SerjioTT

    Посмотреть сообщение

    lubezniy, значение 0.00 :
    Причина Ошибка в формате десятичного числа.
    Содержимое элемента <ОПСстраховаяЧасть> не соответствует нужному типу.
    Источник <ОПСстраховаяЧасть></ОПСстраховаяЧасть>

    Это означает только одно: 0.00 в файл

    не попало

    , или же проверяется какая-то его копия.

    Сообщение от SerjioTT

    Посмотреть сообщение

    извернулся таки я: через импорт экспорт двух программ сформировал xml
    теперь такая ошибка:
    Причина Нарушено ограничение на минимально допустимую длину.
    Длина текстового содержимого элемента <НаименованиеУдостоверяющего> меньше величины, минимально допустимой для данного элемента.
    Источник <НаименованиеУдостоверяющего></НаименованиеУдостоверяющего>

    это поле ДокументПодтверждающийПолномочияПредставителя
    у нас там должно быть пусто. так вот на пустое значение он такую ошибку выдает.

    Тогда Вам вообще в файле не нужен блок ДокументПодтверждающийПолномочияПредставителя.



    • Спасибо



      0

    Комментарий

  • Новичок

    • Регистрация: 20.07.2010
    • Сообщений: 4
    • Спасибо: 0

    непопало… хм… да я уже вручную XML правлю

    убрал блок — выдал 21 шт ошибок по кладру
    это нормально? он в несколько циклов проверяет чтоли?



    • Спасибо



      0

    Комментарий

  • lubezniy

    • Регистрация: 01.02.2007
    • Сообщений: 3914
    • Спасибо: 88

    И, тем не менее, судя по информации из поля «Источник», правите не то.

    убрал блок — выдал 21 шт ошибок по кладру
    это нормально? он в несколько циклов проверяет чтоли?

    Да. Сначала структура данных и соответствие значений типам, потом всё остальное.



    • Спасибо



      0

    Комментарий

  • Новичок

    • Регистрация: 20.04.2013
    • Сообщений: 1
    • Спасибо: 0

    Здравствуйте, нашла данную тему и решила не создавать новую.

    Проблема почти та же, а именно:

    Проверка 1-го документа РАСЧЕТ_ПО_СТРАХОВЫМ_ВЗНОСАМ_НА_ОПС_И_ОМС_ПЛАТЕЛЬЩИ КАМИ_СВ_ПРОИЗВОДЯЩИМИ_ВЫПЛАТЫ_ФЛ_НАЧИНАЯ_С_2013_ГО ДА по схеме…

    ***50: Ошибка при проверке 1-го документа РАСЧЕТ_ПО_СТРАХОВЫМ_ВЗНОСАМ_НА_ОПС_И_ОМС_ПЛАТЕЛЬЩИ КАМИ_СВ_ПРОИЗВОДЯЩИМИ_ВЫПЛАТЫ_ФЛ_НАЧИНАЯ_С_2013_ГО ДА по схеме…

    Причина Ошибка в формате десятичного числа.
    Содержимое элемента <ОПСнакопительнаяЧасть> не соответствует нужному типу.
    Источник <ОПСнакопительнаяЧасть/>
    Строка 102
    Позиция 29

    как понять,что неправильно?



    • Спасибо



      0

    Комментарий

  • Новичок

    • Регистрация: 14.01.2008
    • Сообщений: 3940
    • Спасибо: 50

    Сообщение от Оксана89

    Посмотреть сообщение

    Здравствуйте, нашла данную тему и решила не создавать новую.

    Проблема почти та же, а именно:

    Проверка 1-го документа РАСЧЕТ_ПО_СТРАХОВЫМ_ВЗНОСАМ_НА_ОПС_И_ОМС_ПЛАТЕЛЬЩИ КАМИ_СВ_ПРОИЗВОДЯЩИМИ_ВЫПЛАТЫ_ФЛ_НАЧИНАЯ_С_2013_ГО ДА по схеме…

    ***50: Ошибка при проверке 1-го документа РАСЧЕТ_ПО_СТРАХОВЫМ_ВЗНОСАМ_НА_ОПС_И_ОМС_ПЛАТЕЛЬЩИ КАМИ_СВ_ПРОИЗВОДЯЩИМИ_ВЫПЛАТЫ_ФЛ_НАЧИНАЯ_С_2013_ГО ДА по схеме…

    Причина Ошибка в формате десятичного числа.
    Содержимое элемента <ОПСнакопительнаяЧасть> не соответствует нужному типу.
    Источник <ОПСнакопительнаяЧасть/>
    Строка 102
    Позиция 29

    как понять,что неправильно?

    Буквально вчера поправлял знакомой, которая выгружала из 1С:
    Выгрузилось

    исправили, чтобы Чек не ругался, на

    <ОПСнакопительнаяЧасть>0.00</ОПСнакопительнаяЧасть>

    Аналогично и с другими тегами, по Страховой, Фомс-у, и чему-то там еще…
    У них стоит что-то типа УСНО ( версию даже не знаю, где посмотреть )



    • Спасибо



      0

    Комментарий

  • Новичок

    • Регистрация: 14.01.2008
    • Сообщений: 3940
    • Спасибо: 50

    Буквально вчера поправлял знакомой, которая выгружала из 1С:
    Выгрузилось

    исправили, чтобы Чек не ругался, на

    Аналогично и с другими тегами, по Страховой, Фомс-у, и чему-то там еще…
    У них стоит что-то типа УСНО ( версию даже не знаю, где посмотреть )

    Да, не написал сразу, что после этого исправления, Чек выругался на «отсутствие кода тарифа» ( его и вправду просто не заполнили в 1С, после заполнения выгрузили файл вновь ), а после исправления и этой строки, Чек стал ругаться на «незаполненную строку с численностью» ( на что бухи сказали, что «мы ее НИКОГДА не заполняли» )…
    На мое предложение «Обновить свою 1С», я получил ответ «у нас она обновлена последним обновлением»…
    Хотя, другая знакомая, которая работает на 1С, сказала, что она еще ПОКА не обновлялась…



    • Спасибо



      0

    Комментарий

  • Новичок

    • Регистрация: 30.10.2007
    • Сообщений: 4011
    • Спасибо: 27

    Чек стал ругаться на «незаполненную строку с численностью» ( на что бухи сказали, что «мы ее НИКОГДА не заполняли» )…

    Эта новая строка 260, а старая 260 стала 261.



    • Спасибо



      0

    Комментарий

  • Новичок

    • Регистрация: 14.01.2008
    • Сообщений: 3940
    • Спасибо: 50

    Эта новая строка 260, а старая 260 стала 261.

    Это которая «превышение»? Пожалуй, вы правы — специально заеду посмотреть, что они там заполняли/заполняют



    • Спасибо



      0

    Комментарий

  • Новичок

    • Регистрация: 30.10.2007
    • Сообщений: 4011
    • Спасибо: 27

    Это которая «превышение»? Пожалуй, вы правы — специально заеду посмотреть, что они там заполняли/заполняют

    Она самая.



    • Спасибо



      0

    Комментарий

Ошибка в файле выгрузки отчета  РСВ-1
При выгрузке из Регламентированной отчетности из 1С:Бухгалтерия 7.7.
в проверке файла выгрузки программа cheсk xml 2011 выдает следующею ошибку.

Ошибка в формате десятичного числа. Содержимое элемента ДоляДохода> не соответствует нужному типу. Источник <ДоляДохода></ДоляДохода>

Что делать?

В разделе выгрузки данных в «Регламентированная отчетность» после выгрузки нажмите кнопку «Просмотреть» и в окне поиска найдите в файле место записи <ДоляДохода></ДоляДохода> и вставит число 0.00000, чтобы текст выглядел следующим образом: <ДоляДохода>0.00000</ДоляДохода>.
Сохраните файл.
Теперь желательно его проверить программой chek xml 2011, которую можно скачать по ссылке Загрузить

#статьи

  • 5 апр 2023

  • 0

Числа с плавающей точкой: что это такое и как они работают

Рассказываем, как дробные числа хранятся в памяти компьютера — всё сложно и волшебно, но оправданно.

Иллюстрация: Катя Павловская для Skillbox Media

Дмитрий Зверев

Любитель научной фантастики и технологического прогресса. Хорошо сочетает в себе заумного технаря и утончённого гуманитария. Пишет про IT и радуется этому.

Компьютеры придумали, чтобы производить вычисления более точно и быстро. Но парадокс в том, что на самом деле их вычисления почти всегда неточны. Например, мы не можем представить число Пи или корень из двух в памяти компьютера — потому что имеем дело с бесконечной дробью (хотя и с «короткими» числами всё не так просто из-за двоичной системы счисления, в которой числа представлены в памяти компьютера, к этому мы тоже вернёмся).

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

Чтобы эффективно проводить вычисления, учёные придумали числа с плавающей точкой — они стали отличным инструментом для представления вещественных чисел (это, по сути, все числа числового ряда, даже те, у которых дробная часть бесконечна).

Под числа с плавающей точкой даже создан единый стандарт IEEE 754 — чтобы все компьютеры, языки программирования, программы и операционные системы работали с ними одинаково и результат получался предсказуемым. В этой статье мы расскажем, что это за стандарт и как он работает.

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

Тогда все компьютеры работали по-разному: у них были собственные операционные системы, принципы организации памяти и способы представления данных. И это создавало проблему: нельзя было перенести программу с одного компьютера на другой, для этого каждый раз приходилось переписывать её под новую систему и «железо».

И если переделать пару функций было не так сложно, то подстраиваться под разные системы представления чисел было действительно мукой. Из-за этого иногда нужно было полностью менять поведение программы, что могло повлиять на её работоспособность и надёжность. В общем — проблема с представлениями чисел была поистине болезненной.

Ошибка в файле выгрузки отчета  РСВ-1
При выгрузке из Регламентированной отчетности из 1С:Бухгалтерия 7.7.
в проверке файла выгрузки программа cheсk xml 2011 выдает следующею ошибку.

Ошибка в формате десятичного числа. Содержимое элемента ДоляДохода> не соответствует нужному типу. Источник <ДоляДохода></ДоляДохода>

Что делать?

В разделе выгрузки данных в «Регламентированная отчетность» после выгрузки нажмите кнопку «Просмотреть» и в окне поиска найдите в файле место записи <ДоляДохода></ДоляДохода> и вставит число 0.00000, чтобы текст выглядел следующим образом: <ДоляДохода>0.00000</ДоляДохода>.
Сохраните файл.
Теперь желательно его проверить программой chek xml 2011, которую можно скачать по ссылке Загрузить

#статьи

  • 5 апр 2023

  • 0

Числа с плавающей точкой: что это такое и как они работают

Рассказываем, как дробные числа хранятся в памяти компьютера — всё сложно и волшебно, но оправданно.

Иллюстрация: Катя Павловская для Skillbox Media

Дмитрий Зверев

Любитель научной фантастики и технологического прогресса. Хорошо сочетает в себе заумного технаря и утончённого гуманитария. Пишет про IT и радуется этому.

Компьютеры придумали, чтобы производить вычисления более точно и быстро. Но парадокс в том, что на самом деле их вычисления почти всегда неточны. Например, мы не можем представить число Пи или корень из двух в памяти компьютера — потому что имеем дело с бесконечной дробью (хотя и с «короткими» числами всё не так просто из-за двоичной системы счисления, в которой числа представлены в памяти компьютера, к этому мы тоже вернёмся).

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

Чтобы эффективно проводить вычисления, учёные придумали числа с плавающей точкой — они стали отличным инструментом для представления вещественных чисел (это, по сути, все числа числового ряда, даже те, у которых дробная часть бесконечна).

Под числа с плавающей точкой даже создан единый стандарт IEEE 754 — чтобы все компьютеры, языки программирования, программы и операционные системы работали с ними одинаково и результат получался предсказуемым. В этой статье мы расскажем, что это за стандарт и как он работает.

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

Тогда все компьютеры работали по-разному: у них были собственные операционные системы, принципы организации памяти и способы представления данных. И это создавало проблему: нельзя было перенести программу с одного компьютера на другой, для этого каждый раз приходилось переписывать её под новую систему и «железо».

И если переделать пару функций было не так сложно, то подстраиваться под разные системы представления чисел было действительно мукой. Из-за этого иногда нужно было полностью менять поведение программы, что могло повлиять на её работоспособность и надёжность. В общем — проблема с представлениями чисел была поистине болезненной.

Такие компьютеры были в продаже в 1980-х годах
Фото: Wikimedia Commons

Компания Intel решила помочь программистам со всего мира и создать единый стандарт представления вещественных чисел. Для этого была создана проектная группа из лучших инженеров. Но на пятки Intel наступали и другие компании — например, у той же DEC появилась похожая идея.

Началась настоящая гонка за лучшее решение: каждая компания фанатела исключительно от своей разработки и надеялась, что именно её примут как промышленный стандарт. А IT-гиганты IBM и Cray наблюдали за всем происходящим со стороны и ждали, пока появится победитель, — чтобы тут же реализовать его стандарт в своих компьютерах.

Сегодня из всех стандартов, возникших в то время, в живых остались только два: спецификация VAX от DEC и K-C-S от Intel. У каждой из них были как свои преимущества, так и недостатки.

Преимущества K-C-S:

  • Десятичный формат. Он позволял представлять вещественные числа в десятичной записи, что очень удобно для человека, но так себе для компьютера.
  • Высокая точность. Десятичное представление повышало точность вычислений и снижало возникновение ошибок при округлении — особенно для операций с большими числами.
  • Меньше ошибок. Стандарт включал специальные значения, которые помогали легко избегать переполнения чисел и проще справляться с ошибками при вычислениях.

Преимущества VAX:

  • Двоичный формат. Все числа записывались только в двоичном представлении, что повышало эффективность вычислений, особенно на компьютерах с VAX-архитектурой.
  • Широкое распространение. Спецификацию VAX уже использовали на разных компьютерах того времени, что позволяло быстро адаптировать её под новые устройства.
  • Высокая производительность. Спецификация VAX была оптимизирована под высокую скорость работы и требовала меньших вычислительных мощностей.
K-C-S VAX
Десятичный формат Двоичный формат
Высокая точность Высокая производительность
Меньше ошибок Широкая распространённость

Компания DEC пыталась сделать всё, чтобы VAX признали единым стандартом. Она даже пыталась убедить авторитетных учёных в том, что конкурирующий K-C-S никогда не станет таким же производительным и успешным. Однако у разработчиков из Intel были свои секретики: например, они знали, как ускорить свою спецификацию и обогнать DEC.

В итоге победила Intel, а её спецификация легла в основу стандарта IEEE 754, который утвердил Институт инженеров электротехники и электроники (IEEE) в 1985 году.

Чтобы понять стандарт IEEE 754, нам нужно сперва разобраться, как числа представляют в двоичной системе. Всего существует два представления десятичных чисел в компьютере: с плавающей точкой и фиксированной. Первые основаны на вторых, поэтому есть смысл начать с них.

И да, дальше мы будем употреблять слово «точка», однако в других статьях и литературе можно встретить термин «запятая». Они означают одно и то же, но в англоговорящих странах чаще используют второй, а в русскоговорящих — первый.

Числа с фиксированной точкой — это двоичные числа, у которых ограничен размер их целой и дробной части. Например, если число состоит из 16 битов, то мы можем выделить для целой части первые 10 битов и оставшиеся шесть — для дробной части.

Разделение между целой и дробной частью как раз и обозначают точкой. Когда компьютер получает число, он сразу понимает, что в нём 2 байта, или 16 битов, из которых 10 — это целая часть, а шесть — дробная. Получится так:

Изображение: Skillbox Media

На картинке — двоичное представление десятичного числа 689.6875 в виде двоичного числа с фиксированной точкой. Вот ещё один пример с числом поменьше:

Изображение: Skillbox Media

Здесь закодировано число 13.0. Видим, что в дробной части одни нули и, соответственно, дробная часть десятичного числа — нулевая.

Давайте подробнее разберём, почему всё получилось именно так. Сначала посмотрим на целую часть — это обычное представление десятичного числа в двоичной записи. Каждый разряд числа относится к степени двойки. Число из примера выше можно разложить так:

Изображение: Skillbox Media

Чтобы перевести двоичную запись в десятичную, нужно сложить все степени двойки, у которых в разряде стоит единица. Получим:

Изображение: Skillbox Media

Теперь рассмотрим дробную часть. Принцип перевода дробной части двоичного числа в десятичную систему такой же. Единственное отличие в том, что там степени двойки — отрицательные. Рассмотрим число из примера выше:

Изображение: Skillbox Media

Степень двойки начинается с −1 и с каждым разрядом уменьшается на единицу: −2, −3 и так далее, а чтобы перевести её из отрицательной в положительную, нужно просто перевернуть дробь. И теперь мы также складываем все степени двойки, у которых в соответствующем разряде стоит единица:

Изображение: Skillbox Media

Теперь нам осталось сложить целую часть с дробной:

Изображение: Skillbox Media

Преимущества чисел с фиксированной точкой в том, что они всегда представляются в виде конечного числа. Это значит, что если мы захотим представить число Пи, то оно будет ограничено на определённом знаке, а остальные мы просто отбросим. Например, так:

Изображение: Skillbox Media

Это число — приближённое представление числа Пи, и оно не является его точным значением.

Недостатки у чисел с фиксированной точкой, конечно же, тоже есть. Например, если мы возьмём 16-битные числа, у которых первые 10 битов относятся к целой части и остальные шесть — к дробной, то в нашем распоряжении окажется такой диапазон значений:

Изображение: Skillbox Media

И тут мы переходим к главному недостатку чисел с фиксированной точкой. Давайте возьмём самое большое число, которое можно записать таким образом, и вычислим число перед ним, то есть такое число:

Изображение: Skillbox Media

Видим интересное: когда мы убрали одну единицу в конце двоичного числа, то получили разницу между двумя числами не 0.000001, как в десятичных числах, а 0.015625. Это число представляет собой как бы минимальный шаг в числах с фиксированной точкой, или максимально возможную точность.

Если мы возьмём следующее число, то разница останется такой же:

Изображение: Skillbox Media

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

С фиксированной точкой разобрались, теперь перейдём к плавающей, а затем узнаем уже о формате IEEE 754.

Если говорить техническим языком, то число с плавающей точкой (или число с плавающей запятой) — это численное представление вещественного числа в программировании. Иначе говоря, оно является его приближённым значением.

Двоичное представление чисел с плавающей точкой содержит три части: знаковый бит, экспоненту и мантиссу.

  • Знаковый бит указывает, положительное число или отрицательное.
  • Экспонента показывает, на какое число нужно умножать мантиссу.
  • Мантисса — это фиксированное количество битов, которое выражает точность числа.

Эти определения слегка сложноваты, поэтому давайте сначала разберёмся с основами.

В научной нотации числа удобнее представлять как что-то небольшое, умноженное на 10 в какой-то степени. Например, число 123.456 удобнее представить в виде 1.23456 × 102 Это удобнее, потому что для умножения двух чисел в таком виде не приходится тратить много сил. Звучит неочевидно, но давайте посмотрим на практике — умножим число 0.0006 на 0.0002:

Изображение: Skillbox Media

Как мы видим, в научной нотации нужно было просто сложить степени и произвести несложное умножение. А в обычном виде нам нужно было умножить два числа и ещё не запутаться, сколько нулей слева нужно дописывать. Одним словом — научная нотация проще.

В этой нотации число состоит тоже из трёх компонентов: экспоненты, коэффициента, мантиссы и знака числа.

  • Знак числа указывает, какое это число: положительное или отрицательное. Он нужен, чтобы мы постоянно работали с положительным числом, а уже потом при необходимости перевели его в отрицательное.
  • Коэффициент — это основная часть десятичного числа, записанного обычно в диапазоне от 1 до 9. Но для чисел с плавающей точкой он находится в диапазоне от 0 до 1.
  • Мантисса — это дробная часть коэффициента.
  • Экспонента — это то, на что мы умножаем коэффициент.

Так, число 1.2 × 10−7 можно представить следующим образом:

Изображение: Skillbox Media

Вот что мы получили:

  • +1 — знак числа (положительный),
  • 0.12 — мантисса,
  • −8 — экспонента.

Можно заметить, что мы сразу заменили коэффициент 1.2 на 0.12. Мантисса — 0.12.

Число 10 называют основанием. Принято использовать его, потому что мы считаем всё в десятичной системе. Однако основание можно и поменять. Давайте представим число 0.12 × 10−8 в виде числа с основанием 5.

Изображение: Skillbox Media

Мантисса стала более устрашающей, но заметьте, что экспонента (то есть степень) не поменялась. И это абсолютно нормально, ведь мы применяли базовые правила умножения.

Почему не поменялась экспонента? Следите за руками :) Сначала мы разбиваем число 10 на множители — 5 и 2, а раз у исходного числа была степень −8, то у нас будут множители 5−8 и 2−8.

Теперь давайте перейдём к двоичному представлению. В нём основанием будет число 2, потому что это эквивалент числу 10 в двоичной системе. А мантисса будет точно так же лежать в диапазоне от 0 до 1 (не включительно). Поэтому всё, что меняется, — это основание.

Выглядеть десятичное число 0.12 × 10−8 в двоичном представлении будет вот так:

Изображение: Skillbox Media

Научная нотация — это тот принцип, по которому строится двоичное представление десятичных чисел в компьютерах. Теперь давайте разбираться, что за стандарт IEEE 754 и как он работает.

Стандарт IEEE 754 — это набор правил, которые описывают, как вещественные числа представляются в компьютере. Этот формат стал самым распространённым в программировании, когда дело доходит до арифметики чисел с плавающей точкой.

Числа представляются фиксированным количеством битов, каждый из которых отвечает своим задачам. В IEEE 754 обычно используют 32 бита. Они делятся на всё те же категории: один знаковый бит, 7 битов для экспоненты (то, на что мы умножаем мантиссу) и 24 бита для мантиссы (она выражает точность числа).

Изображение: Skillbox Media

Чтобы получить из этого представления десятичное число, используют следующую формулу:

Изображение: Skillbox Media

Здесь З — это знаковый бит, М — мантисса, Э — экспонента. А ещё у нас появилось смещение. Оно необходимо, чтобы экспонента могла принимать положительные и отрицательные значения, и в стандарте IEEE 754 представляет собой константу — число 127.

Если без смещения экспонента может принимать значения от 0 до 255, то со смещением от −127 до 128. Это нужно, чтобы представлять маленькие числа.

Чтобы вычислить мантиссу, мы должны добавить к ней слева единицу и после неё поставить точку, как будто это число с фиксированной точкой. А затем вычислить это число:

Изображение: Skillbox Media

Получили наше число 1.23, но не совсем. То, что вы видите, называется приближением двоичных чисел к десятичным. Если бы у нас было бесконечное количество битов, то мы смогли бы довольно точно представить число 1.23 в двоичной системе, и оно получило бы вид: 1.2300000000000000000000000000000001. Что уже неплохое приближение. Но так как у нас ограниченное число битов, приходится идти на округление.

Теперь давайте подставим все числа в формулу:

Изображение: Skillbox Media

Всё сходится. Попробуем перевести ещё одно число в десятичную систему. На этот раз двоичное число будет таким:

0 10000000 11100000000000000000000

Пройдём все те же шаги:

  • знаковый бит — 0;
  • экспонента — 128;
  • мантисса — 1.875.

Теперь подставляем в формулу:

Изображение: Skillbox Media

Получили число 3.75 в десятичной записи.

Мы узнали, как числа с плавающей точкой хранятся в памяти компьютера, какие биты за что отвечают и как происходит преобразование из стандарта IEEE 754 в десятичные числа. Теперь давайте узнаем, какие у них есть нюансы, о которых точно нужно знать.

Числа с плавающей точкой имеют два нуля (положительный и отрицательный), две бесконечности (положительную и отрицательную) и неопределённость. И всё это нужно, чтобы правильнее считать числа.

Два нуля. В стандарте IEEE 754 существуют два нуля — положительный и отрицательный. Они нужны, чтобы компьютер мог различать значения, которые близки к нулю, но имеющие разные знаки. Это важно при умножении и делении.

Например, представьте, что у банка есть финансовое приложение, которое работает с очень маленькими процентными ставками, такими как 10−15. Если бы у нас не было двух нулей, то при округлении мы бы получали неточные значения. Мы бы не смогли знать, отрицательная ставка у клиента или положительная, а это бы влияло на то, сколько он будет платить денег, что очень важно для него.

В стандарте IEEE 754 эти два нуля записываются так:

Положительный ноль
Изображение: Skillbox Media

Отрицательный ноль
Изображение: Skillbox Media

Экспонента и мантисса должны содержать все нули, а знаковый бит будет указывать, какой мы имеем ноль: положительный или отрицательный.

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

У бесконечности есть два типа: положительная бесконечность и отрицательная бесконечность. Чтобы получить положительную, нужно положительное число поделить на положительный ноль или отрицательное число на отрицательный ноль:

Изображение: Skillbox Media

Отрицательную бесконечность можно получить похожим образом, только если поделить отрицательное число на положительный ноль или положительное число на отрицательный ноль:

Изображение: Skillbox Media

Чтобы понять, где и когда применяют бесконечности, нужно обращаться к математическому анализу, но это сложная тема, которую мы не будем затрагивать. Давайте просто посмотрим, как выглядят бесконечности в виде двоичной записи стандарта IEEE 754:

Положительная бесконечность
Изображение: Skillbox Media

Отрицательная бесконечность
Изображение: Skillbox Media

В бесконечностях экспонента всегда должна состоять из единиц, а мантисса — из нулей. При этом знаковый бит указывает, какая это бесконечность: положительная или отрицательная.

Неопределённость. В математике есть понятие неопределённости. Это когда мы делим что-то на что-то и не знаем, какой результат получили. Звучит странно: как это мы можем не знать результат? Но давайте на примерах.

Что мы получим, если поделим ноль на ноль, бесконечность на бесконечность, бесконечность на ноль или ноль на бесконечность? Никто не знает. Поэтому математики говорят, что мы получим неопределённость. А в стандарте IEEE 754 вводят понятие Not-a-Number — NaN. Выглядит оно так:

Изображение: Skillbox Media

Неопределённость очень похожа на бесконечность, но главное её отличие в том, что в числе NaN должен быть хотя бы один ненулевой бит в мантиссе.

Стандарт IEEE 754 поддерживает два вида вещественных чисел: нормализованные и денормализованные. Нормализованные числа нужны, чтобы представлять очень большие значения, а денормализованные — очень маленькие, которые близки к нулю.

Нормализованные числа. Они нужны, чтобы хранить и обрабатывать значения с максимально возможной точностью, что может быть критическим для некоторых приложений. Ещё для нормализованных чисел нужно меньше места в памяти.

Если говорить просто, нормализованные числа — это научная нотация чисел. Например, чтобы записать число 123 в научной нотации, нужно привести его к такому виду: 1.23 × 102. Это и будет нормализованным числом. В нём коэффициент (число 1.23) должен находиться в диапазоне от 1 до 9.

Чтобы отличать нормализованные числа, в стандарте IEEE 754 первый бит мантиссы делают равным единице. И тогда число принимает следующий вид:

Число 59 в нормализованном виде
Изображение: Skillbox Media

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

Но при этом возникает другая проблема: если число близко к нулю, то мы не можем представить его с нужной нам точностью. Это число просто пропадёт из нашего вида, потому что компьютер округлит его до нуля. Поэтому работать с очень маленькими значениями в нормализованном виде не получится.

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

Если коэффициент нормализованных чисел принимает значения от 1 до 9, то у денормализованных — от 0 до 1, не включая последнюю. А первый бит мантиссы у таких чисел всегда равен нулю. Поэтому двоичная запись будет выглядеть так:

Число 2.5 × 10−15 в денормализованном виде
Изображение: Skillbox Media

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

Некоторые системы предпочитают обращаться с денормализованными числами очень просто: считать, что они все равны нулю. Другие — используют специальные способы обработки таких значений. Но все они неэффективны, потому что компьютеры сами по себе не умеют с ними взаимодействовать.

Интересно заметить, что граница между нормализованными и денормализованными числами лежит ровно на числе 0.75.

Выше мы рассматривали привычные числа с плавающей точкой. Они состоят из 32 битов: одного знакового бита, восьми для экспоненты и 23 для мантиссы. Этот стандарт называется одинарной точностью и является самым распространённым форматом среди вещественных чисел.

В разных языках программирования есть свои представления десятичных чисел, и в некоторых они суперточные. Например, в Java существуют типы BigInteger и BigDecimal, которые, по сути, не ограничивают размер числа. Такая переменная может хранить и 32 бита, и 302 бита. Но, конечно же, такой размах влияет на производительность, потому что хранятся эти числа как строки.

Одинарная точность может представить числа в диапазоне от −3.40282347 × 1038 до +3.40282347 × 1038. И сама точность составляет семь знаков после точки. Этот формат часто используют в компьютерной графике, научном моделировании и других приложениях, которым нужен баланс между диапазоном значений и точностью.

Кроме одинарной точности, есть ещё и двойная. Такие числа состоят из 64 битов, из которых один принадлежит знаку, 11 — экспоненте, 52 — мантиссе. Доступный диапазон значительно шире: от −1.7976931348623157 × 10308 до +1.7976931348623157 × 10308. А точность уже составляет 15–17 чисел после запятой.

Числа с двойной точностью используют там, где важна высокая точность. Например, их применяют для научных и инженерных вычислений, в которых допустить ошибку бывает критично. Но это всё усложняется большими ресурсными тратами — в памяти и компьютерных мощностях.

Мы разобрали, как устроены и как работают числа с плавающей точкой. Это тема гораздо шире и глубже, а её изучение может занять не один день. Поэтому давайте подведём итог и перечислим, что можно вынести из этой статьи:

  • Числа с плавающей точкой — это приближённое представление вещественных чисел в программировании. Все правила их представления записаны в стандарте IEEE 754.
  • Этот стандарт нужен, чтобы разные компьютерные архитектуры могли одинаково удобно и эффективно работать с вещественными числами.
  • Числа с плавающей точкой бывают с одинарной точностью и двойной. Числа с одинарной точностью состоят из 32 битов: одного знакового бита, восьми битов для экспоненты и 23 битов для мантиссы. Числа с двойной точностью — из 64 битов: одного знакового бита, 11 битов для экспоненты и 52 битов для мантиссы.
  • В стандарте IEEE 754 есть специальные значения, которые нужны для представления положительного и отрицательного нуля, бесконечностей и неопределённости.

Научитесь: Профессия Python-разработчик
Узнать больше

Can anyone tell me why I get an error message on the following code:

import java.text.DecimalFormat;
public class Labsheet {

  public static void main(String args[])
{
    double number = 1.0/3.0;

    DecimalFormat number_format = new DecimalFormat(“#.##”);
    System.out.println(number);
    String formatted_string = number_format.format(number);
    System.out.println(formatted_string);
}

}

The error is on («#.##»); — syntax error on tokens, delete these tokens.
I don’t understand why this is an error.

asked Feb 23, 2016 at 19:04

Rupert's user avatar

1

I suggest you replace

“#.##”

with

"#.##"

as which is &#8220 and which is &#8221 cannot be use delimit a String.

answered Feb 23, 2016 at 19:06

Peter Lawrey's user avatar

Peter LawreyPeter Lawrey

524k77 gold badges749 silver badges1130 bronze badges

4

Исправление ошибки #ЧИСЛО!

Excel для Microsoft 365 Excel для Microsoft 365 для Mac Excel для Интернета Excel 2021 Excel 2021 для Mac Excel 2019 Excel 2019 для Mac Excel 2016 Excel 2016 для Mac Excel 2013 Excel для iPad Excel Web App Excel для iPhone Excel для планшетов с Android Excel 2010 Excel 2007 Excel для Mac 2011 Excel для телефонов с Android Excel для Windows Phone 10 Excel Mobile Excel Starter 2010 Еще…Меньше

В Excel эта ошибка возникает тогда, когда формула или функция содержит недопустимое числовое значение.

Такое часто происходит, если ввести числовое значение, используя тип данных или числовой формат, который не поддерживается в разделе аргументов данной формулы. Например, нельзя ввести значение $1,000 в формате валюты, так как знаки доллара используются как индикаторы абсолютной ссылки, а запятые — как разделители аргументов. Чтобы предотвратить появление ошибки #ЧИСЛО!, вводите значения в виде неформатированных чисел, например 1000.

В Excel ошибка #ЧИСЛО! также может возникать, если:

  • в формуле используется функция, выполняющая итерацию, например ВСД или СТАВКА, которая не может найти результат.

    Чтобы исправить ошибку, измените число итераций формулы в Excel.

    1. На вкладке Файл выберите пункт Параметры. Если вы используете Excel 2007, нажмите кнопку Microsoft Office Изображение кнопки Office и выберите Параметры Excel.

    2. На вкладке Формулы в разделе Параметры вычислений установите флажок Включить итеративные вычисления.

      Снимок экрана: параметры итеративных вычислений

    3. В поле Предельное число итераций введите необходимое количество пересчетов в Excel. Чем больше предельное число итераций, тем больше времени потребуется для вычислений.

    4. Для задания максимально допустимой величины разности между результатами вычислений введите ее в поле Относительная погрешность. Чем меньше число, тем точнее результат и тем больше времени потребуется Excel для вычислений.

  • Результат формулы — число, слишком большое или слишком малое для отображения в Excel.

    Чтобы исправить ошибку, измените формулу таким образом, чтобы результат ее вычисления находился в диапазоне от -1*10307 до 1*10307.

    Совет: Если в Microsoft Excel включена проверка ошибок, нажмите кнопку Значок кнопки рядом с ячейкой, в которой показана ошибка. Выберите пункт Показать этапы вычисления, если он отобразится, а затем выберите подходящее решение.

Дополнительные сведения

Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.

См. также

Полные сведения о формулах в Excel

Рекомендации, позволяющие избежать появления неработающих формул

Поиск ошибок в формулах

Функции Excel (по алфавиту)

Функции Excel (по категориям)

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.

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

Понравилась статья? Поделить с друзьями:
  • Ошибка в функции вывода объектов netcat
  • Ошибка в формате даты в ячейке
  • Ошибка в фсс льгота 60
  • Ошибка в фотошопе с текстом
  • Ошибка в фотошопе первичный рабочий диск переполнен как исправить