IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Вычисление относительной погрешности для функции.
Krjuger
сообщение 12.04.2011 17:19
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


В общем это некое продолжение моей прошлой темы,только обрастающее новыми подробностями.
У меня дана функция x(expx-1).Я эту функцию раскладываю я ряд Тейлора и получаю сумма от 1 до N от xn+1/n!.
Чтобы найти относительную погрешность мне надо а -n ый член разделить на сумму ряда,все это по модулю.Ну в общем то ,я думаю, вы и так понимаете как это делать.Суть заключается в том,у меня опять есть ограниченная разрядность мантисы и мне надо посмотреть как она будет влиять на результат.И как будет меняться N при которых мы будем выходить за граници возможностей нашей машины.

Я немного абстрагировался от этой задачи.что я сделал, при помощи маткада я посчитал,при каком N будет достигаться относительная погрешность на грани машинного эпсилон 10-16,это N =24.Да забыл сказать,что точка в которой мы раскладываем ряд у меня дана.Это -2.3.Затем я высчитал значение этой погрешности она составила 8.602898672363349*10^-16.Дальше я посомтрел как оно себя будет вести при разрядах мантисы от 10 до 25,при фиксированных исходных данных.Для рязрядности с 10 до 16 я получил ожидаемый результат,но дальше начало твориться что то вообще непонятное.Ну или точнее я не могу понять, как это интерпретировать.
ИзображениеФайл с самой программой тоже прикрепляю.


Прикрепленные файлы
Прикрепленный файл  ChMet_Laba_1.cpp ( 1.24 килобайт ) Кол-во скачиваний: 250
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 15.04.2011 17:58
Сообщение #2


Гость






Цитата
Я не понял почему вы вызывали для мантисы 5 type MyFloat_05 is new Float digits 1;
Я не для какой-то мантиссы делал специфическое значение digits, я просто создал три новых типа, каждый из которых ограничивает вычисления определенной точностью. Первый - одной десятичной цифрой после запятой, второй - двумя, третий, соответственно, тремя. Зачем? А затем, чтобы все эти 3 типа имели разное представление: разную длину мантиссы, в данном случае. При желании можно сделать еще и длину экспоненты разной, но меня это в данном случае меньше интересовало. Потом проверил, что для сконструированного типа возвращает атрибут 'Mantissa - это как раз и будет число бит в мантиссе (как ты на 5 битах собрался достичь точности 10-5 для меня - загадка). Атрибут 'Epsilon возвращает ту самую точность, до достижения которой надо продолжать вычисления (здесь мне ничего вручную делать не надо - в отличие от тебя, творящего непонятно что с числами - в случае Ады это забота компилятора. Если я сказал, что мне достаточно одной цифры после запятой, и 'Mantissa показала, что M=5, то все вычисления будут производиться именно так, как они и должны производиться при пятибитной мантиссе).

Ну, а потом - все просто. Вычисляем очередной член ряда до тех пор, пока не доберемся до незначащих значений (меньше эпсилон). Можно чуть-чуть поправить, не домножать знаменатель на N, а делить числитель на него. От этого ничего не изменится, разве что будет работать при больших значениях N.

Цитата
Собственно,вопросы которыми я задаюсь следующие.Почему фигня начинается при мантисе 19,а не после 16
Собственно, вопрос: а почему фигня должна начинаться при длине мантиссы = 16? И с какой стати ты решил, что те результаты, которые ты получил - фигня? Я, например, вообще ничего не вижу на твоем скриншоте. Выведи хотя бы то же самое, что выводил я: длина мантиссы, последний член ряда, сумма ряда. Вот тогда и посмотрим, что у тебя творится...

Цитата
Кстати вы уж извините,но я руками посчитал несколько первых членов ряда,и с вашими цифрами они никак не совпадают.
Вы у ж меня тоже извините, но я посчитал сумму ряда (оно же - значение x(ex - 1)) при заданном X. Что характерно - сумма (при использовании точных типов) совпадает идеально. Как может быть, что член ряда не совпадает, а их сумма - таки да? И... Что именно не совпадает?

Первый: (-2.3)2 / 1! = 5.29 (у меня 5.3E+00)
Второй: (-2.3)3 / 2! = -6.0835 (у меня -6.1E+00)

Дальше продолжать? С учетом точности представления (не забыл? 5 бит мантиссы - это 1 десятичная цифра после запятой) как раз все совпадает...

В общем, убеждаюсь в очередной раз: тебе лучше не отвечать, ибо я ж еще и виноват в том, что ты не умеешь читать и считать. dry.gif Удачи тебе в дальнейших обвинениях других...

Вот вычисления при длине мантиссы 15, 18, 21, 25, 28 и 31 бит (Показать/Скрыть)
может быть пригодится...
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 28.07.2025 14:35
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"