Pull to refresh
0
0
Спиридонов Юрий Маркович @Innotor

Изобретатель

Send message
См. опубликованные евразийские заявки на изобретение № 201500284 и 201500168.
Я рад, что вы что-то почерпнули из обсуждений. Но, к сожалению, в вашим коменте столько несуразицы, что мне просто жаль время это обсуждать.
Минимальное нормализованное число, согласно спецификации стандарта, равно 1,17549435∙e-38. Пусть мы имеем число 1.23456*10^(-10). С какой точностью оно представлено? Если с точностью до 7 знака после точки, то оно равно 0. Если с точностью до 7 значащих цифр, то оно равно 1.23456*10^(-10).
Вы путаете два понятия: количество знаков после запятой и количество значащих цифр. Когда мы число нормализуем, точность уже определяется через количество значащих цифр.
Может подскажете тогда, какие еще исключения существуют в формате float?
0.6000006 = 1.001100110011001101001*2^(-1)= 0.6000006198883056640625
И чем же это число вам так не угодило?
Вот тут-то вся и закавыка. При десятичных вычислениях все так и получается. Но мы, мало того, что ведем вычисления в двоичной арифметике, но еще и по правилам стандарта IEEE754. В котором обязательной процедурой является нормализация. И число 0.0056, после нормализации, будет выглядеть как 5.6*2^(-3)+Ulps в десятичном представлении. Округлите мантиссу до 4 знака после точки и что вы будете иметь?
1. сумма 0.6000006 и 0.03339874 — формата float недостаточно для вычислений с данной точностью.

Да нет. В большинстве случаев он достаточен. Формат float обеспечивает представление десятичных цифр в двоичном коде, гарантируя 7 верных десятичных цифр. Это неопровержимый факт, который легко доказывается. Неопровержимым фактом также является то, что сумма этих чисел с точностью до 7 знака после точки/запятой, посчитанная вручную, равна 0,6333993.
Но самое интересное всегда происходит на границе. Число 0.6000006 является тем числом, в котором после обратной конвертации из двоичного кода в десятичный, после последней цифры 6 возникает «хвост» (или Ulps), который близок к числу 2. Этот самый Ulps и искажает результат суммирования наших чисел, т.к. во втором слагаемом мы имеем 7 значащих цифр и последняя цифра в нем больше или равно 4. После суммирования 2 и 4 получаем число 6, которое заставляет округлить нашу сумму с увеличением. Таким образом, при сложении двух десятичных чисел в двоичном коде, в формате float, можно гарантировать, что 6 значащих цифр результата будут верными.
2. умножение 0.06543455 на 139 — аналогично, при умножении необходимо иметь удвоенное количество разрядов для хранения результата.

Для хранения результата в формате float нам отведено всего 24 двоичных разряда, которые могут обеспечить точное представление 7 значащих десятичных цифр. Удвоенная мантисса нужна для промежуточных вычислений.
3. деление 131 на 0.066 аналогично предыдущему. 1/0.066=15.151515...=15.(15) имеет бесконечное количество значащих цифр.

Также как при умножении, на результат деления оказывает влияние хвост, который может искажать последнюю цифру результата. При делении несоизмеримых чисел всегда получается бесконечная дробь, которую необходимо округлить, чтобы как-то записать в отведенную разрядность. Как работать с десятичными дробями мы знаем. Но результат искажается за счет хвоста.

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

А как вы догадались, что округлить надо до 4 цифр? Глядя на полученный результат? А почему не до 5 или 6 знака после запятой, как здесь кто-то выше предлагал?
Вообще, для проверки ваших математических выкладок я бы рекомендовал Вам использовать не Excel или калькулятор, а системы компьютерной алгебры.

Мои математические выкладки не зависят от инструмента, на котором их можно проверить. Они основаны на свойствах ЧПТ и только.
И потом, какая проблема-то? Все, что мы тут уже битую неделю обмусоливаем, для инженерных расчетов не является проблемой.

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

Этот вопрос обсуждался выше по ветке с пользователем vadimr. Если есть что добавить, милости просим.

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

Чем точнее представлено число, тем меньше его относительная и абсолютная погрешность, т.е. выше гарантии его верного представления. Или не так? Так точность актуальна для инженеров или нет?

Ваши арифметические экзерцисы представляют определенный интерес для бухгалтерских расчетов. Но когда точно считают копейки плавающей точкой(запятой) пользуются редко.

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

А этот INTEL в угоду бухгалтерам и ученым все увеличивает и увеличивает длину машинной мантиссы в ущерб производительности. А сейчас, я слышал, и вообще учудил, в железе реализовал арифметику ЧПТ в двоично-десятичном коде для точности. И еще. Народ совсем обнаглел, придумал сверхдлинную точную арифметику, которая производительность свела почти на нет. Ну совсем не думают об инженерах.

Попробуйте проанализировать, откуда в инженерных/научных расчетах берутся вещественные дробные числа, записанные в десятичной системе счисления?

Сейчас попробую. Ну, во-первых, когда конвертируют двоичную дробь в десятичную, если расчеты ведутся на компьютере. Во-вторых, когда находят отношение двух чисел (не зависимо от системы счисления), связанных какой-либо функциональной зависимостью. В-третьих… Больше не знаю.

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

Такой физикой я тоже не занимаюсь.
Извините, изотерикой не занимаюсь, поэтому ничего возразить не могу.
Мне нечего на это возразить. Хотелось бы только расширить это утверждение и на целые числа. Только с оговоркой, что не некоторые, а все целые десятичные числа могут быть точно представлены в двоичном коде, а все дробные двоичные и все двоичные целые числа могут быть точно представлены в десятичном виде.
Извините, думал это будет понятно без уточнения. В скобках указаны системы счисления, а не периодичность дробей.
Чешуйки кожи постоянно отслаиваются. Всё имеет определённую точность рассмотрения

Я все таки не пойму, какое количество детей заперто в кладовке? За единицу измерения берем голову или килограммы?.. Или мы не имеем права определять количество детей по головам? Тогда, если определяем только по массе, то, простите, из туалета только что вышло 45,46 кг. Васи:), а заходило 45,8. Посчитал по головам, получилось — ровно одна. Сколько Вась мы имеем в наличии? По вашему, где-то 45(+-1) кг. А он растет и становится его уже 92 кг. Было в кГ. 45,46 Васи, а стало в два раза больше — 92кг. или 92(+-)кг. Сколько взрослых Вась мы имеем?
Я придумал способ точной обработки десятичных чисел с помощью двоичной арифметики. Тем самым мы получаем такой же точный результат, как при использовании двоично-десятичной арифметики, но по скорости почти не уступающей двоичной арифметике.
Нет фатальной ошибки в том, что формат с ограниченной точностью имеет ограниченную точность.

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

Вы правы. Изобрел. И начал патентовать, пока только базовые операции.См. опубликованные евразийские заявки на изобретение № 201500284 и 201500168.
Если вы боитесь, что «такой неожиданный результат из придуманных нами, случайно не выскочит при контроле, например, за ядерной установкой», то в любом случае уже поздно что-то менять — в современных процессорах стандарт реализован аппаратно.

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

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

Я писал: «И хотя, после перевода в десятичное представление дробного двоичного числа конечной длительности, вы можете получить бесконечную дробь».
0.5(10)= 0.1(2), 0.625(10)=0.101(10) и т.д. Это точные равенства.
Математика создавалась не для решения инженерных задач. Это для решения инженерных задач привлекается математика.
Когда вы говорите о своих детях, то это их нумерация натуральными числами в вашем списке детей, а не измерение количества, поэтому в данном случае говорить о погрешности не приходится.

Считаю, все ли дети дома? Один, два, три. Так, общее количество — приблизительно 3!
Хотя в вычислительной технике существуют понятия «одинарная точность», «двойная точность» и т.д., качественно характеризующие конкретные форматы представления чисел в компьютере.

Не качественно, а количественно. В формате флоат можно представить точно до 7 значащих десятичных цифр. В формате дабл — до 16 десятичных цифр. И хотя, после перевода в десятичное представление дробного двоичного числа конечной длительности, вы можете получить бесконечную дробь, первые 16 значащих цифр десятичного числа, проконвертированного из 2 в 10 систему, будут точными.
64-битное целое может хранить до 18-19 разрядов, дальше сами думайте, куда пихать разделитель дробной части.

Во-первых, 64-битное целое двоичное число может обеспечить представление десятичного числа с точностью не выше 16 значащих цифр. А во-вторых, в целом числе отсутствует дробная часть, которая и приводит к описанным в статье неприятностям.
Microsoft Excel was designed around the IEEE 754 specification to determine how it stores and calculates floating-point numbers.

Эксель в статье был использован как инструмент для иллюстрации правильности приведенных вычислений в стандарте IEEE754.
Запрограммируйте приведенный вами пример на любом языке, в котором используется формат IEEE754, задав формат дабл, и вы получите тот же результат. Так что эксель здесь не причем.

Information

Rating
Does not participate
Location
Минск, Минская обл., Беларусь
Registered
Activity