21 / 9 / 0
Регистрация: 18.06.2011
Сообщений: 185
|
||||||
1 | ||||||
Сумма ряда до точность E08.10.2012, 18:26. Показов 5613. Ответов 21
Метки нет Все метки)
(
Четвёртый член ряда равен 0.001411 (можете проверить запустив программу)
Вопрос: почему не срабатывает строчка (последняя) if(E<b) printf("Sum ryada do tochnosty %f ravna: %f\n", E, w); Когда 0.0001<0.001411?
0
|
|
08.10.2012, 18:26 | |
Ответы с готовыми решениями:
21
Точность ряда Определить количество членов ряда, которые дают заданную точность Вычислить сумму бесконечного ряда с заданной точность для значения x Вычисление функции прекратить, если достигнута заданная точность e, либо взято в разложении ряда m членов |
ComfyMobile
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
|
|
08.10.2012, 18:34 | 2 |
сравнивай по абсолютному значению
0
|
21 / 9 / 0
Регистрация: 18.06.2011
Сообщений: 185
|
|
08.10.2012, 18:42 [ТС] | 3 |
0
|
ComfyMobile
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
|
|
08.10.2012, 18:48 | 4 |
сравнивать можно но у тебя члены ряда могут быть и положительными, и отрицательными, в частности 5 член отрицательный и он меньше погрешности она положительна, но по абсолютному значению погрешность будет меньше , для нахождения абсолютного значения используй функцию fabs();
0
|
21 / 9 / 0
Регистрация: 18.06.2011
Сообщений: 185
|
|
08.10.2012, 18:56 [ТС] | 5 |
Да, 5-й член меньше, да и все остальные, кроме 4-го. Если четвёртый работает, то почему не работает if(E<b) printf("Sum ryada do tochnosty %f ravna: %f\n", E, w); ?
На счёт fabs, то if(fabs(E)<fabs(b)) printf("Sum ryada do tochnosty %f ravna: %f\n", E, w); всё равно ничего не выводит.
0
|
ComfyMobile
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
|
||||||
08.10.2012, 19:04 | 6 | |||||
ну для начала еще неплохо былобы засунуть проверку внтурь цикла
1
|
21 / 9 / 0
Регистрация: 18.06.2011
Сообщений: 185
|
||||||
08.10.2012, 19:24 [ТС] | 7 | |||||
Я сделал немного по своему всё же(про то что в цикл его не добавил - моя невнимательность). Теперь всё работает. Интересно, а как сделать максимальную точность(она вроде бы зависит от компьютера)?
0
|
ComfyMobile
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
|
||||||
08.10.2012, 19:32 | 8 | |||||
она зависит от типа вроде, я сам могу ошибатся но вот этот код покажет машинный 0
1
|
21 / 9 / 0
Регистрация: 18.06.2011
Сообщений: 185
|
|
08.10.2012, 19:42 [ТС] | 9 |
Если можно, то поподробней. Как я понимаю, В данном случае мы работает с двоичной системой исчисления с типом double, где его min: 1.7e-308, а max: 1.7e+308. И получается мы должны как-то взять максимальный...(тут даже не знаю что спросить, т.к. хз)
0
|
ComfyMobile
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
|
|
08.10.2012, 19:57 | 10 |
на практике это значение 5.4 е-20 хотя должно было бы быть по меньше
0
|
21 / 9 / 0
Регистрация: 18.06.2011
Сообщений: 185
|
|
08.10.2012, 20:00 [ТС] | 11 |
Не понял, для какого типа данных вы имели ввиду данное число? + если не затруднит, то объясните про максимальную точность(саму идею желательно, чтобы мне понять как и что, да и почему)
0
|
ComfyMobile
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
|
|
08.10.2012, 20:05 | 12 |
для типа double 5.4 е-20 машиной воспринимается уже как 0, если вы внимательно взгляните на код, то условие выхода из цикла do while именно если у меня 1+u<=1 так как u >0 , то меньше 1 мы не получим результат только если u будет равно машинному 0 , для типа dobule самое ближайшее получается
5.4 е-20 , числа меньше практически не влияют на результат
1
|
21 / 9 / 0
Регистрация: 18.06.2011
Сообщений: 185
|
|
08.10.2012, 20:50 [ТС] | 13 |
Получается надо выдернуть число перед u(если u=0, то перед нулём было нормальное число, которое нам и нужно). Как это сделать?
0
|
ComfyMobile
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
|
|
08.10.2012, 21:16 | 14 |
сравнивай с u если меньше либо рано то прекращай считать
1
|
21 / 9 / 0
Регистрация: 18.06.2011
Сообщений: 185
|
||||||
08.10.2012, 21:23 [ТС] | 15 | |||||
Вот как реализовал, но всё равно выводит нули. Может дело в том, что значение гораздо меньше чем 0.000000?
0
|
ComfyMobile
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
|
||||||
08.10.2012, 21:39 | 16 | |||||
да , а у тебя в этом была проблема? замени на std::cout<< либо смотри еше параметры printf
исходя из справки вместо %f используй %е и да , зачем тебе вот эта строка if(v=0) break; ? и тем более у тебя не сравнение идет а присвоение!!! Добавлено через 11 минут
1
|
21 / 9 / 0
Регистрация: 18.06.2011
Сообщений: 185
|
|
08.10.2012, 22:05 [ТС] | 17 |
получается минимальное значение типа double это 4.94065e-324(это вроде бы больше чем 1.7e-308, т.к. 1.7 это минимум), а не 1.7e-308. Это я как понял такое встречается только на практике, но вот с чем это связано? (не с проста же в книжках пишут значение 1.7e-308)
0
|
ComfyMobile
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
|
|
08.10.2012, 22:12 | 18 |
вы что то путаете, начиная с того что 4.94065e-324 это меньше чем 1.7e-308, а во вторых у нас диапозон значений идет с минусовых и скорее всего -1.7 e308 , 1.7 e308 вот это диапазон
а минусовые степени это оч малые значения приближающиеся к 0
1
|
21 / 9 / 0
Регистрация: 18.06.2011
Сообщений: 185
|
|
08.10.2012, 22:23 [ТС] | 19 |
На счёт диапазона данных, то он такой: 1.7E-308-1.7E+308. Соответственно возникает вопрос, если 4.94065e-324 меньше чем 1.7e-308, то как оно вообще находится в этом диапазоне данных?
Источник: http://citforum.ru/programming... _017.shtml
0
|
ComfyMobile
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
|
|
08.10.2012, 23:21 | 20 |
что очень важно опять же для Borland C++ 4.5 из источника , у меня Embarcadero RAD Studio XE 2 2010 года стандарты меняются, и каким то образом возможность хранить еще меньшие значения получается, мне эти шаманства не ведомы, но тем не менее , для вашей задачи , такая ошибка не играет роли, обычно берут несколько первых членов ряда, 4-6 остальные уже мало влияют на ситуацию, поэтому ошибка порядка малости 4-6 вполне допустимы, не надо считать машиный 0, это я просто для примера привел
почитай википедию там пишут про диапазон , я не вчитывался , но то что тебя интересует там вроде есть
1
|
08.10.2012, 23:21 | |
Помогаю со студенческими работами здесь
20
Найти номер члена ряда, начиная с которого сумма ряда будет больше заданного А
Найти сумму ряда с точность 0.001 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |