為什麼這篇e的計算鄉民發文收入到精華區:因為在e的計算這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者coilion9670 (白熊)看板C_and_CPP標題[問題] 數學式程式時間Mon Oct...
e的計算 在 BusinessFocus | 商業、投資、創科平台 Instagram 的最讚貼文
2021-09-17 18:42:26
【@marketfocus.hk 】【龔成專欄】市盈率太高太低同樣易有陷阱 25倍以上股票屬偏高 初哥不宜沾手 . 【引言】財經書籍作者及股評人龔成認為,投資股票一定要對公司有認識,如果連基本的財經知識如「市盈率(PE RATIO)」也不懂,那麼便「不如不要投資」。龔成稱,市盈率就是股票市價除以盈利...
開發平台(Platform): VC++
問題(Question):
1) 撰寫一個程式計算數學常數e的趨近值。
1 1 1
e= 1 + 一 + 一 + 一 + ....
1! 2! 3!
2) 寫一個程式計算e^x的值
x x^2 x^3
e^x = 1 + 一 + 一 + 一 + ...
1! 2! 3!
老師出這兩題有沒有大神能幫一下
完全沒頭緒這程式的寫法
小弟現在大一剛學C++
希望有人能幫我解惑'
感謝 Oㄇ_
剛剛沒把公式key上來抱歉
小弟馬上補!!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.128.194.70
> -------------------------------------------------------------------------- <
作者: tropical72 (藍影) 看板: C_and_CPP
標題: Re: [問題] 計算 Exponential function 函數值
時間: Mon Oct 17 02:25:30 2011
※ 引述《coilion9670 (白熊)》之銘言:
: 開發平台(Platform): VC++
先來看第一個無聊的問題
(1) 1+2+....+n
int i, n, sum=0;
scanf("%d", &n);
for(i=1; i<=n; i++)
sum = sum+i;
(2) n!
階乘函數,它的狹益定義是: n! = n*(n-1)*(n-2)*...*1 ,
像 5! = 5*4*3*2*1 = 120,
所以先寫個 n! 之副函式,也由於用整數會溢位 (不知道溢位的話請 google),
所以用浮點數去存結果,下面是計算 i 階層函數大概長這樣 (不考慮負數情況)
int j, i=10;
double fact=1.0;
for(j=1; j<=i;j++)
fact = fact * j;
最後 fact 就是 10! (10階乘)
(3) 1/1 + 1/2 + 1/3 + ....+ 1/n
仿造問題 (1) 的 1+2+3+...+n, 只有一部份要修改而已。
int i, n, sum=0;
scanf("%d", &n);
for(i=1; i<=n; i++)
sum = sum + 1.0/i;
(4) 1+(1/1!+1/2!+1/3!+...+1/n!)
對照上面程式(2)與程式(3)
其中程式 (3) 只有一點小變化
int i, j;
int n=20; // 有 n 項
double fact; // 存 i 階乘
double sum=1.0; // 存 公式總合, 初始給 1.0
for(i=1; i<=n; i++) { // 有 n 個項次
// 算 i 階乘, 來自程式 (2)
fact=1.0;
for(j=1; j<=i; j++) fact = fact*j;
// 算倒數合,來自程式 (3)
// 程式 (3) : sum = sum + 1.0/i;
sum = sum + (double)i/fact;
}
最後 sum 的結果,就是你下面第一題的答案。
: 1) 撰寫一個程式計算數學常數e的趨近值。
: 1 1 1
: e= 1 + 一 + 一 + 一 + ....
: 1! 2! 3!
: 2) 寫一個程式計算e^x的值
: x x^2 x^3
: e^x = 1 + 一 + 一 + 一 + ...
: 1! 2! 3!
(5) 1+(x/1!+x^2/2!+x^3/3!+...+x^n/n!)
比照上面的程式 (4), 做以下修改
int i, j;
int n=20; // 有 n 項
double fact; // 存 i 階乘
double sum=1.0; // 存 公式總合, 初始給 1.0
double power; // 存 x 的 i 次方
double x=0.0;
printf("輸入 x 值 :"), scanf("%lf", &x);
printf("輸入 n 項 :"), scanf("%d", &n); // 這個可自己定 20~100試試
for(i=1; i<=n; i++) { // 有 n 個項次
// 算 i 階乘, 來自程式 (2)
fact=1.0;
for(j=1; j<=i; j++) fact = fact*j;
// 算 x 的 i 次方
power=1.0;
for(j=1; j<=i; j++) power = power * x;
// 算倒數合,來自程式 (3)
// 原本程式 (4) --> sum = sum + (double)i/fact; 換下面
sum = sum + power/fact;
}
printf("e^%d = %lf\n", x, sum);
---------
註
(1) 上面用的方法效率非常差,但適合初學者學習。
(2) 可調用 math.h 裡之 pow 協助完成,此處自己寫。
(3) 這題可以包三個副函式:power(算次方)、fact(算階乘)、ex(算 e^x),
考量沒學到副函式,所以全塞在主程式裡面。
(4) 基於考量初學者對 eps 概念不強,以定式 n 項方式寫,不以 eps 方式做收斂。
(5) If those codes can work, it was coded by me;
otherwise, I don't know who wrote those.
good luck.