Cách tính e mũ x – Viết chương trình tính e mũ x có ử dụng hàm

Bài toán : Viết chương trình có dùng hàm để tính e mũ x theo công thức sau :
Tinh-e

Hướng dẫn giải quyết bài toán

Nhìn trên dãy khai triển trên ta có thể thấy chúng có cùng một công thức chính là x^n / n!

Vậy tất cả chúng ta sẽ viết một hàm tính lũy thừa và một hàm tính giai thừa là gần như đã xử lý được bài toán trên .

Xây dựng hàm tính giai thừa

Code tham khảo:

01234567

floatgiaiThua(intn){

intgiaithua=1;

for(inti=1;i<=n;i++)

giaithua *=i;

return(float)giaithua;

}

Xây dựng hàm tính lũy thừa

Code tìm hiểu thêm :

01234567

floatluyThua(intn,intk){

intpow=1;

for(inti=1;i<=k;i++)

pow *=n;

return(float)pow;

}

Giải quyết bài toán tính e mũ x

Xây dựng hàm tính e mũ x theo dãy khai triển

Ở phía trên tất cả chúng ta đã viết hai hàm đó là hàm tính giai thừa và hàm tính lũy thừa rồi phải không nào !
Bây giờ trách nhiệm còn lại là tính e mũ x theo dãy khai triển trên mà thôi. Ta sẽ sử dụng một vòng lặp while để tính e mũ x như sau :

  • Khởi tạo một giá trị sum bằng 0.
  • Nếu xn / n! > ε thì ta cộng giá trị sum cho xn / n!
  • Quá trình sẽ lặp đi lặp lại đến khi điều kiện trên sai( tức là sai số không quá lớn).
  • Ta sẽ cho số ε rất nhỏ cỡ 0.0000001 để quá trình tính toán chính xác hơn.

Code tính e mũ x :

012345678910111213141516171819202122232425262728293031323334

#include

floatluyThua(intn,intk){

intpow=1;

for(inti=1;i<=k;i++)

pow *=n;

return(float)pow;

}

floatgiaiThua(intn){

intgiaithua=1;

for(inti=1;i<=n;i++)

giaithua *=i;

return(float)giaithua;

}

floatfun(intx)

{

floatsum=0;

inti=0;

while(luyThua(x,i)/giaiThua(i)>1 e-10){

sum+=luyThua(x,i)/giaiThua(i);

i++;

}

returnsum;

}

intmain(){

intx;

printf(” Nhap x : “);

scanf(” % d “,và x ) ;

printf(” e ^ x : % 6 f “,fun(x));

return0;

}

0123 Nhap x : 1e ^ x : 2.718282

Các bạn quan tâm là hai hàm tính lũy thừa và giai thừa của mình đã được ép kiểu về float hết rồi nhé. Nếu những bạn không ép kiểu thì tác dụng sẽ bị sai đấy !

Tối ưu chương trình hơn

Nếu bạn nào để ý thì sẽ nhận ra điều sau: Viết chương trình tính e mũ x 1

Vậy nên tất cả chúng ta sẽ chỉ cần dùng một vòng while để tính e mũ x mà thôi. Không cần phải viết hai hàm tính lũy thừa và giai thừa như trên nữa. Hơn nữa với số mũ lớn thì cách này tỏ ra tiêu biểu vượt trội trọn vẹn so với cách ở trên. Độ đúng chuẩn cũng cao hơn những trên, vậy thì tại sao lại không dùng nào ?
Ban đầu mình sẽ khởi tạo một biến sum = 1, i = 1 và một biến temp = x. Sau đó kiểm tra nếu temp > ε thì ta triển khai cộng thêm vào giá trị temp cho sum. Sau đó ta nhân temp với x / i và triển khai tăng giá trị i lên một đơn vị chức năng. Qúa trình cứ lặp đi tái diễn cho đến khi điều kiện kèm theo trong vòng while bị sai .
Code tìm hiểu thêm :

012345678910111213141516171819202122

#include

floatfun(intx){

floatsum=1;

inti=1;

floattemp=x;

while(temp>1 e-10){

sum+=temp;

i++;

temp=temp *x/i;

}

returnsum;

}

intmain(){

intx;

printf(” Nhap x : “);

scanf(” % d “,và x ) ;

printf(” e ^ x : % 6 f “,fun(x));

return0;

}

0123 Nhap x : 10e ^ x : 22026.468750

Với số mũ lớn như 10 thì độ đúng chuẩn vẫn rất cao !

Bài viết mình đến đây là kết thúc. Cám ơn các bạn đã theo dõi !