Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/30: Рейтинг темы: голосов - 30, средняя оценка - 4.53
829 / 353 / 64
Регистрация: 30.01.2009
Сообщений: 1,204
1

Вычислить формулу

12.09.2011, 11:14. Показов 6168. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
[LATEX]\frac{{x}^{k}}{k!}[\LATEX] Нужно расписать, чтобы не было переполнения
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.09.2011, 11:14
Ответы с готовыми решениями:

Вычислить формулу
Помогите пожалуйста с этой задачей: Вычислить сумму ряда по приведенным в вариантах выражениями....

Вычислить формулу
Помогите пожалуйста с этой задачкой...Не знаю как тут вообще вычислить эту формулу...Нам лекций по...

Вычислить формулу
Помогите пожалуйся 6 задание:help:

Вычислить формулу
Задача: Написал для z1: #include <iostream.h> using namespace std; int main() { double...

10
194 / 193 / 15
Регистрация: 12.12.2010
Сообщений: 270
12.09.2011, 12:22 2
латекс не работает...
напиши по обычному или картинкой
0
6287 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
12.09.2011, 12:22 3
https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{{x}^{k}}{k!}
Слеш нужно другой ставить
1
194 / 193 / 15
Регистрация: 12.12.2010
Сообщений: 270
12.09.2011, 13:04 4
ну начнем так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <cmath>
using namespace std;
 
double frac(double f){
int sum=1;
for (int i=1; i<=f; i++)
sum=sum*i;
return sum;
}
 
int main(){
double x=2;
double k=3;
double y= pow(x,k)/frac(k);
cout<<y;
return 0;
}
давайте условия переполнения придумаем сначала... а потом их решим.
http://www.codenet.ru/progr/cpp/spru/matherr.php

Добавлено через 26 минут
чето даже самому интересно стало... как то так что ли?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <cmath>
using namespace std;
 
double frac(double f){
int sum=1;
for (int i=1; i<=f; i++)
sum=sum*i;
return sum;
}
 
int main(){
double x=200;
double k=300;
double y;
int matherr (x)
 
register struct exception *x;
   {
     if (x->type==OVERFLOW) {
       if (!strcmp(x->name, "pow")) {
         x->retval=pow(-x->arg1);
         return(0); 
       }
     }
     return(0); 
   }
y=pow(x,k)/frac(k);
cout<<y;
return 0;
}
Кто -нибудь воткнул как эту функцию грамотно применять?)
1
Эксперт С++
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
12.09.2011, 13:42 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
 
using namespace std;
 
double f(double x, int k)
{
    double frac = 1.0;
 
    for (int i = k; i > 0; --i)
        frac = frac * x / i;
 
    return frac;
}
 
int main()
{
    double x = 200.0;
    int k = 250;
    
    double y = f(x, k);
    cout << y << endl;
    
    return 0;
}
Переполнение, конечно, всё-равно возможно, но при больших x
1
194 / 193 / 15
Регистрация: 12.12.2010
Сообщений: 270
12.09.2011, 13:55 6
ну вот я колдую с matherr :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <cmath>
#include <stdio.h>
#include <string.h>
using namespace std;
 
double frac(double f){
int sum=1;
for (int i=1; i<=f; i++)
sum=sum*i;
return sum;
}
 
int main(){
double x=200;
double k=300;
double y;
int matherr (matherrexpp);
 
register struct exception *matherrexpp;
   {
     if (matherrexpp->type==OVERFLOW) {
       if (!strcmp(matherrexpp->name, "pow")) {
         matherrexpp->retval=pow(-(matherrexpp->arg1));
         return(1); 
       }
     }
     return(0); 
   }
 
y=pow(x,k)/frac(k);
cout<<y;
return 0;
}
вылетают ошибки
source.cpp: In function 'int main()':
source.cpp:18:14: error: 'matherrexpp' was not declared in this scope
source.cpp:18:5: warning: unused variable 'matherr' [-Wunused-variable]

Build finished with errors
короче надо с matherr разобраться как-то как с ним работать и тогда топикстартерский вопрос будет решен.
1
Эксперт С++
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
12.09.2011, 14:03 7
Цитата Сообщение от zalogic Посмотреть сообщение
короче надо с matherr разобраться как-то как с ним работать и тогда топикстартерский вопрос будет решен.
ТС надо не обнаружить переполнение, а избежать его. Как в этом помогут исключения?
1
194 / 193 / 15
Регистрация: 12.12.2010
Сообщений: 270
12.09.2011, 14:21 8
grizlik78, ну насколько я понял её специально и сделали для таких целей
matherr служит в качестве пользовательской
ловушки, (функции определяемой пользователем)
которую вы можете написать сами (смотрите пример).

matherr можно использовать для отслеживания ошибок
области определения и выхода за пределы диапазона,
происходящих в математических функциях. Она не
отслеживает исключительных ситуаций, возникающих
при работе со значениями с плавающей точкой
(например при делении на 0). Для отслеживания
таких ошибок смотри функцию signal.
0
Эксперт С++
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
12.09.2011, 15:02 9
Цитата Сообщение от zalogic Посмотреть сообщение
grizlik78, ну насколько я понял её специально и сделали для таких целей
Ну допустим обнаружили мы что переполнение произошло. Что дальше? Вывести сообщение об ошибке? Между тем при x = 600 и k = 500 дробь вполне вычисляется без переполнения double. Мой код выше. Этот код не сможет посчитать дробь только в том случае, если конечный результат не умещается в double, то есть результат можно считать бесконечным (для double) или использвать тип с большим диапазоном чисел.
0
194 / 193 / 15
Регистрация: 12.12.2010
Сообщений: 270
12.09.2011, 19:35 10
Ну допустим обнаружили мы что переполнение произошло. Что дальше? Вывести сообщение об ошибке?
А ну хорошо, просто так и надо говорить тогда было ,что нужен какой-то алгоритм для расчета, а не просто в лоб использование каких-то переменных и функций из cmath с последующим применением исключений или ещё чего-то.

С возведением в степень проблем не будет.
так как например 2^20 это 2*2*2*2*...
Если просто сделать массив символов и потом каждый символ конвертировать в цифру и по шагам просто умножать. это не сложно.

Тоже и с факториалом получается...

Получается вся сложность с делением, так как мы будем делить строки, например:
324324543654675677879872341231414343242543
на
3243243244567788999999999999999909
хммм...

Добавлено через 4 часа 23 минуты
Алгоритм деления - предназначен для вычесления неполного частного и остатка от деления двух целых чисел.
http://ru.wikipedia.org/wiki/%... 0%BC%D1%8B
и тут ещё
http://forum.sources.ru/index.... 210512&hl=

а нужен ли такой гемморой? Конечно все зависит от задачи, но в 99% случаев лучше сделать обработку исключения.
0
829 / 353 / 64
Регистрация: 30.01.2009
Сообщений: 1,204
12.09.2011, 22:22  [ТС] 11
grizlik78, спасибо! Проблема временно решена.
Хотел так решить:
C++
1
2
tmp = pow(x, k);
for (int i = 1; i <= k; tmp /= i++);
, но при больших числах(x > 500, k > 100) негатив
0
12.09.2011, 22:22
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.09.2011, 22:22
Помогаю со студенческими работами здесь

Вычислить математическую формулу
При написании кода программы столкнулся с проблемой. Программа выводит неправильное число. Скорее...

Вычислить рекуррентную формулу
даны действительное число а и натуральное число n.Вычислить p=a(a+1)..(a+n-1).Си++ ,циклом do while...

Вычислить рекуррентную формулу
Есть код С++ #include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; ...

Вычислить формулу n раз
Составить программу в С++.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Какой язык программировани­я лучший для разработки нейронных сетей
InfoMaster 20.01.2025
В современном мире технологий искусственные нейронные сети становятся неотъемлемой частью множества инновационных решений, от распознавания речи до автоматического управления транспортными. . .
Как подключить JavaScript файл в другом JavaScript файле
InfoMaster 20.01.2025
В современной веб-разработке организация кодовой базы играет ключевую роль в создании масштабируемых и поддерживаемых приложений. Модульность и правильное структурирование кода стали неотъемлемыми. . .
Как откатить изменения в исходниках, не внесенные в Git
InfoMaster 20.01.2025
При работе с системой контроля версий Git разработчики часто сталкиваются с необходимостью отменить внесенные изменения в исходном коде. Особенно актуальной становится ситуация, когда изменения еще. . .
В чем разница между px, in, mm, pt, dip, dp, sp
InfoMaster 20.01.2025
В мире цифрового дизайна и разработки интерфейсов правильный выбор единиц измерения играет ключевую роль в создании качественного пользовательского опыта. История развития систем измерений для. . .
Как изменить адрес удалённого репозитория (origin) в Git
InfoMaster 20.01.2025
В терминологии Git термин origin является стандартным именем для основного удаленного репозитория, с которым взаимодействует локальная копия проекта. Когда разработчик клонирует репозиторий с. . .
Как переместить последние коммиты в новую ветку (branch) в Git
InfoMaster 20.01.2025
При работе над проектом часто возникают ситуации, когда необходимо изолировать определенные изменения от основной линии разработки. Это может быть связано с экспериментальными функциями, исправлением. . .
Как вернуть результат из асинхронной функции в JavaScript
InfoMaster 20.01.2025
Асинхронное программирование представляет собой фундаментальную концепцию в JavaScript, которая позволяет выполнять длительные операции без блокировки основного потока выполнения программы. В. . .
Какой локальный веб-сервер выбрать
InfoMaster 19.01.2025
В современной веб-разработке локальные веб-серверы играют ключевую роль, предоставляя разработчикам надежную среду для создания, тестирования и отладки веб-приложений без необходимости использования. . .
Почему планшеты и iPad уже не так популярны, как раньше
InfoMaster 19.01.2025
Эра революционных инноваций История планшетов началась задолго до того, как эти устройства стали привычными спутниками нашей повседневной жизни. В начале 1990-х годов появились первые прототипы,. . .
Как самому прошить BIOS ноутбука
InfoMaster 19.01.2025
BIOS (Basic Input/ Output System) представляет собой важнейший компонент любого компьютера или ноутбука, который обеспечивает базовое взаимодействие между аппаратным и программным обеспечением. . .
Какой Linux выбрать для домашнего компьютера
InfoMaster 19.01.2025
Современные реалии выбора операционной системы В современном мире выбор операционной системы для домашнего компьютера становится все более важным решением, которое может существенно повлиять на. . .
Как объединить два словаря одним выражением в Python
InfoMaster 19.01.2025
В мире программирования на Python работа со словарями является неотъемлемой частью разработки. Словари представляют собой мощный инструмент для хранения и обработки данных в формате "ключ-значение". . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru