|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
10.10.2012, 09:19 | #1 |
Регистрация: 30.09.2012
Сообщений: 8
|
Программа неточно вычисляет произведение
Здравствуйте! Возникла проблема с такой задачей: нужно подсчитывать произведение а[k]-тых пока а[k]-а[k-1]>eps. а[k]=а[k-1]+а[k-1]/2^(k-1), k=2,3.... a[0]=a[1]=1. Написанная мною программа работает, но начиная с произведения a[1]*..*a[4] подсчитывает с неточностью, которая в последующем увеличивается. Подскажите пожалуйста, в чем причина и как это исправить?
Код:
|
10.10.2012, 11:27 | #3 |
Регистрация: 30.09.2012
Сообщений: 8
|
Проверяла на калькуляторе.
получаемый результат - ожидаемый результат 1,50 - 1,50 2,8125 - 2,8125 5,93262 - 5,90625 13,2962 - 13,1709375 30,7309 - 30,28904033 72,1366 - 70,74369193 170,654 - 166,5212525 405,293 - 393,5000344 Последний раз редактировалось konstantusha; 10.10.2012 в 11:31. |
10.10.2012, 11:55 | #4 | |
Форумчанин
Регистрация: 27.09.2012
Сообщений: 175
|
Цитата:
Отправьте сюда код, при котором выдает результаты, которые вы здесь написали. Тьфу! Все, понял. Напишите значения, которые вы вводите. Вот! Попробуйте вместо типа float(одинарная точность) - double(двойную точность). Последний раз редактировалось three_cats; 10.10.2012 в 12:00. |
|
10.10.2012, 12:02 | #5 |
Регистрация: 30.09.2012
Сообщений: 8
|
Правильно. Программа выдает произведение равное 1, потому что вы вводили такое eps, которое заранее больше первого a[k].
Если вы, к примеру, введете eps=0.01, программа выдаст результат 170,654, что является неточным результатом... |
10.10.2012, 12:03 | #6 |
Форумчанин
Регистрация: 27.09.2012
Сообщений: 175
|
А еще я не могу понять, объясните, вот это условие зачем?
Код:
Последний раз редактировалось three_cats; 10.10.2012 в 12:10. |
10.10.2012, 12:11 | #7 |
Регистрация: 30.09.2012
Сообщений: 8
|
Если его убрать, то программа начнет выдавать произведение, в котором будет участвовать на один член больше, чем мне нужно..
Я прикрепила документ, в нем некоторые просчитанные a[k], значения eps и соответствующие результаты программы. Заменить float на double было первое, что я сделала, когда увидела неточность.Увы, не помогло. Последний раз редактировалось konstantusha; 10.10.2012 в 12:31. |
10.10.2012, 13:20 | #8 | |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,342
|
Сейчас посчитал на калькуляторе Ак-е члены, по-моему, вы их неправильно посчитали на калькуляторе.
Цитата:
Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
Последний раз редактировалось BDA; 10.10.2012 в 13:22. |
|
10.10.2012, 15:17 | #9 |
Форумчанин
Регистрация: 27.09.2012
Сообщений: 175
|
Друзья! Решил задачу своим способом, но, судя по всему, неправильно. Объясните, где ошибка! Никак не могу допереть, весь мозг себе уже вынес!
Код:
|
10.10.2012, 15:30 | #10 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,342
|
three_cats
Сразу бросается в глаза: a[k] = a[k-1] / pow(2,k-1); не верна правильная формула: a[k] = a[k-1] + a[k-1] / pow(2,k-1); или a[k] = a[k-1] * (1 + 1 / pow(2,k-1));
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
(( А у меня логарифм не вычисляет. Программа выдает простые числа. | trumbubudunchik | C# (си шарп) | 1 | 24.05.2012 16:22 |
Программа которая вычисляет принадлежит ли ли данная точка «заштрихованной» области. | Kesida | Помощь студентам | 3 | 05.10.2011 03:48 |
программу, которая вычисляет произведение двух заданных пользователем чисел | smile) | Помощь студентам | 1 | 15.09.2010 19:19 |
программа с использованием подпрограмм, создаёт односвязный список и вычисляет сумму положительных чисел | LOVELY | Паскаль, Turbo Pascal, PascalABC.NET | 5 | 13.12.2008 01:27 |
Надо чтобы программа выводила i начиная с 1 значения.Оно у мну дальше 1 и не вычисляет..? | Влад-mego | Помощь студентам | 3 | 27.11.2008 23:10 |