![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| VIvan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 12.4.2006 Репутация: нет Всего: нет |
Даны действительные числа x, e (x<>0, e>0). Вычислить с точностью e:
"Бесконечность" (-1) в стпени k "Знак суммы" = ------------------------ *(x/2) в степени 2*k+1 k=0 (k!)*(k+1)!
Результат какой-то странный всегда получается. Если не трудно укажите на ошибку. Если таковая имеется. Буду очень признателен за помощь. Это сообщение отредактировал(а) VIvan - 19.4.2006, 16:28 |
|||
|
||||
| CPlusPlusFAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 1.11.2005 Где: Воронеж Репутация: нет Всего: нет |
||||
|
||||
| VIvan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 12.4.2006 Репутация: нет Всего: нет |
При любых вводимых результатах сумма либо 0 либо 1, а неучтенноне слагаемое улетает далеко в минус. Фактически вопрос в том, правильно ли описано выражение
"Бесконечность" (-1) в стпени k "Знак суммы" = ------------------------ *(x/2) в степени 2*k+1 k=0 (k!)*(k+1)! в программе
вот этот участок кода (считаем сумму, количество, последнее учитываемое слагаемое...) |
|||
|
||||
| likehood |
|
|||
|
666 ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: 8 Всего: 24 |
Так у тебя же k не меняется, добавь k++.
Кстати, знаменатель лучше хранить в int64 а то с факториалом шутки плохи. Да, и почему ты суммируешь с единицы а не с нуля. |
|||
|
||||
| VIvan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 12.4.2006 Репутация: нет Всего: нет |
Добавил k++, вроде нормально, правда неучтенное слагаемое всеравно в минусе, что как-то странно. И еще вопрос, что за тип данных int64, он в чистом С есть? k оставил равное единице, при 0, опять не считает.
|
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
нет, зато есть long -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| likehood |
|
|||
|
666 ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: 8 Всего: 24 |
Первое слагаемое (при к==0) можно учесть явно: оно должно быть равно х/2.
Целочисленный 64-разрядный тип. Зависит от твоего компилятора. Если пишешь на чем то типа Borland C++ 3.1, то там его нет, нужен компилер поновее. |
|||
|
||||
| VIvan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 12.4.2006 Репутация: нет Всего: нет |
В принципе если k=0, должен нормально считать. Но работает только при k=1
|
|||
|
||||
| CPlusPlusFAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 1.11.2005 Где: Воронеж Репутация: нет Всего: нет |
Нет инициализации переменной sum
|
|||
|
||||
| VIvan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 12.4.2006 Репутация: нет Всего: нет |
C sum исправился, спасибо.
Еще одни вопросик остался, как записать вот это: ch*=pow(-1,k)*pow(x/2,2*k+1); без применения функции pow. Я пробовал ввести еще одну переменную, увеличивать ее в цикле и на нее домножать, но что-то никак. Подскажите пожалуйста как решить эту задачу. |
|||
|
||||
| Lamak |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 204 Регистрация: 8.5.2005 Где: Украина,Одесса Репутация: нет Всего: 7 |
Вобще можно к примеру так
P=pow(a,b); заменить на P=a; for(int i=1;i<b;i++) P*=a; Но,зачем тебе это надо?Ведь первый вариант красивее и лучше. --------------------
Роботы - это интересно и увлекательно! |
|||
|
||||
| CPlusPlusFAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 1.11.2005 Где: Воронеж Репутация: нет Всего: нет |
А вот тут: pow(-1,k) вообще pow не нужно. Можно так: (k&1)?1:-1 А вот тут, судя по твоему примеру, можно сделать так: завести переменную со значением x/2, а затем на каждой итерации умножать её на (x*x)/4, чтобы каждый раз не высчитывать. Добавлено @ 02:30 Вот код:
|
|||
|
||||
| VIvan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 12.4.2006 Репутация: нет Всего: нет |
За помощь ОГРОМНОЕ спасибо...
Надо не мне, а преподше-маньячке |
|||
|
||||
| CPlusPlusFAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 1.11.2005 Где: Воронеж Репутация: нет Всего: нет |
||||
|
||||
| AzanaptA |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 11.9.2006 Репутация: нет Всего: нет |
либо я - глупая, либо код нерабочий.
использую VC 6.0 выдаёт ошибку - fatal error C1010: unexpected end of file while looking for precompiled header directive Error executing cl.exe. помогите пожалуйста, я только учусь! Это сообщение отредактировал(а) AzanaptA - 11.9.2006, 21:50 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |