|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
01.02.2016, 22:32 | #1 |
Пользователь
Регистрация: 23.01.2016
Сообщений: 11
|
чем объясняется погрешность при сложение вещественных чисел и какими способами можно устранить эту погрешность в Pascal
Здравствуйте, подскажите пожалуйста, чем объясняется погрешность при сложение вещественных чисел и какими способами можно устранить эту погрешность в Pascal.
|
01.02.2016, 22:43 | #2 |
Старожил
Регистрация: 12.11.2010
Сообщений: 8,568
|
Как устранить, я не знаю, наверное, никак.
А объясняется она тем, что все числа, в том числе и вещественные, в ПК представляются в двоичной системе счисления. Даже если мы имеем дробь с конечной десятичной частью (например, 0.25), то при переводе в двоичную СС дробная часть может оказаться бесконечной последовательностью нулей и единиц (например, 0.00100111011001... - не факт, что это 0.25, просто от балды взял, такое число). Поскольку мы не можем хранить бесконечно много информации, эти числа приходится усекать, оставляя лишь некоторое количество знаков после запятой, поэтому на самом деле мы не получим 0.25, а получим вместо этого, например, 0.244444444444491. Отсюда погрешность. |
01.02.2016, 22:46 | #3 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
0.25 как раз нормально, это степень двойки. А так да, просто пример не удачный.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
01.02.2016, 22:49 | #4 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Ну почему никак есть длинная арифметика. Берете где-нибудь или пишите сами такую программу, которая будет считать с такой погрешностью, которая будет незначительная для Вашей задачи. А так если в теории, то дело не только в машинном хранении, а вообще в математике. Ну вот 10/3 и все, абзац. Любой тип данных в виде конкретного значения числа всегда будет давать погрешность для данной операции.
А устранение погрешности решается точкой зрения на задачу. Погрешность есть всегда, при любых расчетах (практических расчетах разумеется). Но есть погрешность фатальная, та которая приводит к таким искажениям результата и промежуточных данных (особенно когда копится в циклах), что не дает объективного решения задачи. А есть погрешность незначительная, та которая не мешает видеть конечный результат. Ну вот например для здания не критично, если оно будет отличаться от проекта на одну миллиардную микрона по своей высоте. А если Вы создаете интегральную схему, то ошибка в миллиметр будет Вам стоить очень дорого. Ну вот допустим взять астрономические расчеты - пока долететь до ближайшей звезды проблемно, поэтому расчеты расстояний ведутся с астрономическими погрешностями - десятые и сотые световых лет. Представляете если отправить космический корабль, который "промахнется" на такое расстояние? Есть например исторические погрешности, которые невозможно устранить из-за противоречий в первоисточниках, недостаточном количестве данных и т.д. Поэтому в истории есть такое понятие как нарратив - последовательность событий. То есть для истории важно не когда именно произошло событие с точностью до дня или там секунды, а какое событие следовало до или следует после данного. И чем старше вопрос, тем актуальней нарратив. Например, не важно когда цивилизация начала обрабатывать железо. Важно, что ни одна цивилизация не может начать обрабатывать железо не освоив технологию обработки меди. Это фактически доказанная аксиома. Вот такое вот решение проблемы погрешности.
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика Последний раз редактировалось Utkin; 01.02.2016 в 23:01. |
01.02.2016, 22:56 | #5 |
Пользователь
Регистрация: 23.01.2016
Сообщений: 11
|
Должен же быть способ контролировать (и возможно исправлять) эту погрешность, иначе это может привести к неправильной работе написанной программы в Pascal.
|
01.02.2016, 23:07 | #6 |
Старожил
Регистрация: 12.11.2010
Сообщений: 8,568
|
Вообще, есть математические способы избавления (вроде) от погрешностей (или что-то в этом роде).
Другие же способы направлены на минимизация погрешности. Например, решение дифференциального уравнения на отрезке [a; b]. При шаге n погрешность будет накапливаться быстрее, чем при шаге n/1000. То есть, надо просто уменьшить шаг сетки интегрирования. Кроме того, есть математические методы, направленные на уточнение корней (речь уже об обычных, числовых уравнениях). Аксиома - это утверждение, не требующее доказательств. Немного криво у тебя получилось. |
01.02.2016, 23:08 | #7 | ||
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Цитата:
Матан здесь: https://ru.wikipedia.org/wiki/Погрешность_измерения Поэтому контролировать погрешность в плане управления ею невозможно. Но можно определять в некоторых случаях уровень погрешности. Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика Последний раз редактировалось Utkin; 01.02.2016 в 23:10. |
||
01.02.2016, 23:11 | #8 |
Старожил
Регистрация: 12.11.2010
Сообщений: 8,568
|
Я уверен, что любая физическая величина для любого предмета выражается иррациональным числом.
|
01.02.2016, 23:14 | #9 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
|
01.02.2016, 23:20 | #10 | |
Старожил
Регистрация: 12.11.2010
Сообщений: 8,568
|
Хотя стоп.
Дополню свои слова. Строго говоря, эти величины - не константы. Например, линейные размеры - колеблются, а масса - постоянно уменьшается. Это моё мнение, а что касается массы - наш преподаватель физики говорил об этом. Цитата:
|
|
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Что не правильно? Программа на C++ находит минимум правильно, а максимум нет. В чем погрешность? | rafael999 | Помощь студентам | 3 | 26.10.2013 11:21 |
Погрешность в интегрировании | Luzifer | Общие вопросы C/C++ | 0 | 30.05.2012 20:25 |
Относительная погрешность | A.M.G_Dig | Помощь студентам | 4 | 20.11.2010 22:57 |
Какими способами в String можно узнать является ли первый символ пробелом? | Des | Помощь студентам | 10 | 07.11.2010 11:19 |
Какими способами можно реализовать кэширование для прокси - сервера? | Slavka8800 | Работа с сетью в Delphi | 0 | 02.06.2009 22:08 |