формат, который в них используется, умеет хранить только 3?
Это вы про какой формат? Котрый был приведен выше, для суммы 0.1+0.1?
Для одноразрядных десятичных чисел достаточно 4 разряда мантиссы. Для чисел 10000 и 10001 достаточно 17 разрядов мантиссы для точного их представления.
Простите, а почему вы тогда её не используете?
Я как раз от вас слышу сплошные лозунги.
Если некая фигура имеет форму окружности с радиусом 1м. То, глядя со стороны, кажется, что это круг, который имеет площадь pi*r^2=3.142м^2. На самом деле, площадь, которую она занимает равна 2pi*r*h, где h=1мм=0,001м, это толщина линии, описывающей круг. В результате, реальную площадь, которую занимает эта фигура, с точностью до 3 значащих цифр равна 0.00629м^2.
Это требует доказательств? Подсчитано на калькуляторе в СДДФ.
Я не могу здесь дублировать свою предыдущую статью. Если вычисления (именно вычисления) проводятся в формате сингл, то так оно и получается, 3,4 знака. А в СДДФ получаются 7 верных десятичных знаков в результате любых вычислений.
Более того, если вам надо 15 значащих на выходе, то вам скорее всего нужно намного больше по ходу задачи.
Если бы вы внимательно прочитали эту мою статью и статью предыдущую, то вы бы увидели, что для получения результата с точностью до 7 значащих десятичных цифр при вычилениях, при использовании СДДФ достаточно 32-х разрядного слова. А для 64 разрядах машинного слова все вычисления проводятся с точностью до 16 верных значащих цифр. В строгом в соответствие с теорией приближенных вычислений.
Послушайте, может хватит говорить лозунгами и оскорблениями? Или в матфизике это принятый стиль ведения дискуссии? Меня в универе на физфаке учили другим этическим нормам. Нас учили использовать математику, а не разговоры о ней.
Все, что сказано ниже, относится к тому, что сказано выше. А выше мы обсуждали проблему вычислений десятичных чисел с плавающей точкой средствами двоичной арифметики. Не вырывайте фразы из контекста. Давайте по сути.
Давно там — я понимаю, насколько мало я знаю и использую результаты титанов (Кнут, Кахан и т.д.)
А вы?
А я больше доверяю фактам. И пытаюсь дать объяснение этим фактам, когда не нахожу ответа у столпов.
Земля когда-то тоже была плоской. А недавно в инете встретил утверждение, что такого континента, как Австралия не существует.
проблема начинается уже с момента, когда вы формулируете точность измерений и вычислений в десятичных цифрах.
Но предполагать, что от точных десятичных расчётов результат вдруг станет точнее, нельзя — потому что он, наоборот, станет менее точным, за счёт более грубого округления.
Никаких проблем не возникает, когда пользуемся десятичной арифметикой. Для нее давно разработана теория вычислений, в которой глубоко изучены проблемы округлений и правила работы с приближенными числами. То же касается и двоичной арифметики.
Проблемы начинаются тогда, когда мы пытаемся правильно округляя двоичное число получить правильно округленное десятичное. Решению этой проблемы посвящено огромное количество работ. Придумываются всякие хитроумные построения. Из последних новых — модульная арифметика и интервальная арифметика.
проблема начинается уже с момента, когда вы формулируете точность измерений и вычислений в десятичных цифрах
Точность — степень приближения истинного значения рассматриваемых параметров изделия, вещества, системы или процесса к истинному или теоретическому номинальному значению (1). Поскольку точное десятичное значение дробного десятичного числа в двоичном представлении принимает приближенное значение, то первое число-точное, а второе приближенное. Дело вкуса (или по другим соображениям), какими числами оперировать. В любом случае, с точными числами, если нет ограничений по разрядной сетке, мы будем получать точные результаты, а с приблизительными — приблизительные. Последние склонны к накоплению ошибки.
Снимите корону и спуститесь на землю.
А на земле вы увидете, что (967542,3-967542,1)*10^5-19992 должно быть равно 8, а подсчитанное в двоичной арифметике в формате дабл, дает 8,0000698E+00. И это числа не с 15 цифрами, для которых результат был бы еще ужаснее. Надеюсь вам не надо объяснять почему такой результат? А если в миллионах ваших операциях встретится хотя бы сотня таких случаев, что вы получите на выходе? Или для матфизики это пыль?
P.S. Матфизику обсуждать здесь не будем. Тем более, что она появилась задолго до компьютеров с их двоичной системой счисления.
Если вы наблюдали за серией моих статей на хабре. А вы таки наблюдали, мы с вами уже однажды дискутировали. То обратили наверно внимание на то, что тема в них не менялась. Хотя вы, вероятно, правы, слово выбрано не совсем корректно.
В топике, на который я ссылался в начале статьи, приведен скриншот результата работы программы 18-ти значного десятичного калькулятора, реализованного в СДДФ на C++, без привлечения специальных библиотечных функций, и результата работы Excel. В обоих случаях производится всего три арифметические операции. И если учесть, что Excel работает в строгом соответствии с IEEE754, используя дабл, то можно видеть, что далеко не всегда двоичная арифметика может удовлетворить потребности пользователя в точности.
Не многовато ли цифр для такого маленького числа, как 0.1
Жаль, что вы так и не поняли суть моего предложения. Если вы посмотрети на коменты выше, то найдете мой пример, где 0.1 в СДДФ представляется 4-х разрядной мантиссой и 2-разрядной экспонентой точно. И более того, их сложение дает точный результат. Если вас это не устраивает используйте библиотечный decimal32.
Вообще говоря, вся информация в компьютере кодируется двоичным кодом. Десятичные числа кодируются (представляются) целыми числами, с фиксированной точкой, с плавающей запятой, двоичными тетрадами и проч. Вопрос в том, как расшифровать код, записанный в машинном слове и на сколько представление числа этим кодом «удобно» для дальнейшего использования, каким требованиям оно должно удовлетворять. В конце концов, двоичным кодом можно просто записать слова «ноль целых, одна десятая». И это точное представление числа 0.1 Другое дело, складывать числа в таком представлении неудобно.
Это вы про какой формат? Котрый был приведен выше, для суммы 0.1+0.1?
Для одноразрядных десятичных чисел достаточно 4 разряда мантиссы. Для чисел 10000 и 10001 достаточно 17 разрядов мантиссы для точного их представления.
Если некая фигура имеет форму окружности с радиусом 1м. То, глядя со стороны, кажется, что это круг, который имеет площадь pi*r^2=3.142м^2. На самом деле, площадь, которую она занимает равна 2pi*r*h, где h=1мм=0,001м, это толщина линии, описывающей круг. В результате, реальную площадь, которую занимает эта фигура, с точностью до 3 значащих цифр равна 0.00629м^2.
Это требует доказательств? Подсчитано на калькуляторе в СДДФ.
Если бы вы внимательно прочитали эту мою статью и статью предыдущую, то вы бы увидели, что для получения результата с точностью до 7 значащих десятичных цифр при вычилениях, при использовании СДДФ достаточно 32-х разрядного слова. А для 64 разрядах машинного слова все вычисления проводятся с точностью до 16 верных значащих цифр. В строгом в соответствие с теорией приближенных вычислений.
А я больше доверяю фактам. И пытаюсь дать объяснение этим фактам, когда не нахожу ответа у столпов.
Земля когда-то тоже была плоской. А недавно в инете встретил утверждение, что такого континента, как Австралия не существует.
Никаких проблем не возникает, когда пользуемся десятичной арифметикой. Для нее давно разработана теория вычислений, в которой глубоко изучены проблемы округлений и правила работы с приближенными числами. То же касается и двоичной арифметики.
Проблемы начинаются тогда, когда мы пытаемся правильно округляя двоичное число получить правильно округленное десятичное. Решению этой проблемы посвящено огромное количество работ. Придумываются всякие хитроумные построения. Из последних новых — модульная арифметика и интервальная арифметика.
Точность — степень приближения истинного значения рассматриваемых параметров изделия, вещества, системы или процесса к истинному или теоретическому номинальному значению (1). Поскольку точное десятичное значение дробного десятичного числа в двоичном представлении принимает приближенное значение, то первое число-точное, а второе приближенное. Дело вкуса (или по другим соображениям), какими числами оперировать. В любом случае, с точными числами, если нет ограничений по разрядной сетке, мы будем получать точные результаты, а с приблизительными — приблизительные. Последние склонны к накоплению ошибки.
Компьютерную арифметику.
Снимите корону и спуститесь на землю.
А на земле вы увидете, что (967542,3-967542,1)*10^5-19992 должно быть равно 8, а подсчитанное в двоичной арифметике в формате дабл, дает 8,0000698E+00. И это числа не с 15 цифрами, для которых результат был бы еще ужаснее. Надеюсь вам не надо объяснять почему такой результат? А если в миллионах ваших операциях встретится хотя бы сотня таких случаев, что вы получите на выходе? Или для матфизики это пыль?
P.S. Матфизику обсуждать здесь не будем. Тем более, что она появилась задолго до компьютеров с их двоичной системой счисления.
Если вы наблюдали за серией моих статей на хабре. А вы таки наблюдали, мы с вами уже однажды дискутировали. То обратили наверно внимание на то, что тема в них не менялась. Хотя вы, вероятно, правы, слово выбрано не совсем корректно.
В топике, на который я ссылался в начале статьи, приведен скриншот результата работы программы 18-ти значного десятичного калькулятора, реализованного в СДДФ на C++, без привлечения специальных библиотечных функций, и результата работы Excel. В обоих случаях производится всего три арифметические операции. И если учесть, что Excel работает в строгом соответствии с IEEE754, используя дабл, то можно видеть, что далеко не всегда двоичная арифметика может удовлетворить потребности пользователя в точности.
2F0F4240
1|09876543210|98765432109876543210
0|01011110000|11110100001001000000
BE=94 E=-7 M=1000000
Не многовато ли цифр для такого маленького числа, как 0.1
Жаль, что вы так и не поняли суть моего предложения. Если вы посмотрети на коменты выше, то найдете мой пример, где 0.1 в СДДФ представляется 4-х разрядной мантиссой и 2-разрядной экспонентой точно. И более того, их сложение дает точный результат. Если вас это не устраивает используйте библиотечный decimal32.