Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

一個關於小數位數的問題!!

0 views
Skip to first unread message

~~~~~~Jerki~~~~~~

unread,
Mar 10, 2004, 10:03:52 AM3/10/04
to
#include <iostream>
using std::cin;
using std::cout;
using std::endl;

#include <iomanip>
using std::setiosflags;
using std::setprecision;

#include <cmath>

void main(){
double result; //e之估計值
double j;
cout<<setprecision(8);
cout<<"e=(1+h)^1/h"<<endl;
for(j=0.01;j>0.0000001;j=j*0.1){
cout<<"h="<<j<<" e="<<result<<endl;
result=pow(1+j,(1/j));
}
}
這是求e的近似值的問題~

但我執行後
e=(1+h)^1/h
h=0.01 e=-9.2559631e+061
h=0.001 e=2.7048138
h=0.0001 e=2.7169239
h=1e-005 e=2.7181459
h=1e-006 e=2.7182682
h=1e-007 e=2.7182805 ------>該怎麼做才會顯示0.0000001?
Press any key to continue
麻煩高手解答 謝謝唷

--
[1;33m∣ ▲ ∣ [33;41m夢之園地 [m [1;33m:虎尾科技大學計中尋夢園 [m
[1;31m╭—╮├—╮ —┼— [33;41m尋夢位址 [m [1;33m: [36mbbs.nhit.edu.tw [37m〔 [31m140.130.4.104 [37m〕 [m
[1;34m∣ ∣∣ ∣ ∣ ∣ [33;41m夢者來源 [m [1;33m: [30mp28-130.nhit.edu.tw [m
[1;32m∣ ∣∣ ∣ ∣ ∣ 今夜睡不著覺,只有到 [31m尋 [36m夢 [33m園 [32m找尋另一個夢境。 [35m∣ [m
[1;35m┴ ┴┴ ┴ ┴ ╰═══════════════════════╯ [m

XWL

unread,
Mar 10, 2004, 10:31:22 AM3/10/04
to
==> 在 jerk...@venus.nhit.edu.tw (~~~~~~Jerki~~~~~ 的文章中提到:
你可以用 printf( "%2.10f",h );
--
* Post by XWLin from sw67-8-105.adsl.seed.net.tw
* Origin: ★ 交通大學資訊科學系 BBS ★ <bbs.cis.nctu.edu.tw: 140.113.23.3>

~~~~~~Jerki~~~~~~

unread,
Mar 11, 2004, 9:37:58 AM3/11/04
to
※ 引述《XWLi...@bbs.cis.nctu.edu.tw (XWL)》之銘言:
我們現在在交c++...所以一定要用其他方法耶...

XWL

unread,
Mar 11, 2004, 10:26:06 AM3/11/04
to
==> 在 jerk...@venus.nhit.edu.tw (~~~~~~Jerki~~~~~ 的文章中提到:
> ※ 引述《XWLi...@bbs.cis.nctu.edu.tw (XWL)》之銘言:

> > 你可以用 printf( "%2.10f",h );
> 我們現在在交c++...所以一定要用其他方法耶...

char Buffer[1024];
memset( Buffer,0,sizeof( Buffer ) );
sprintf( Buffer,_T("%2.10f"),0.000001 );
cout << (LPCTSTR)Buffer << endl;

這樣子呢?
還是要寫個class來處理這項功能。
--
* Post by XWLin from sw68-238-94.adsl.seed.net.tw

~~~~~~Jerki~~~~~~

unread,
Mar 11, 2004, 10:33:42 AM3/11/04
to
※ 引述《XWLi...@bbs.cis.nctu.edu.tw (XWL)》之銘言:

> ==> 在 jerk...@venus.nhit.edu.tw (~~~~~~Jerki~~~~~ 的文章中提到:
> > 我們現在在交c++...所以一定要用其他方法耶...
> char Buffer[1024];
> memset( Buffer,0,sizeof( Buffer ) );
> sprintf( Buffer,_T("%2.10f"),0.000001 );
> cout << (LPCTSTR)Buffer << endl;
> 這樣子呢?
> 還是要寫個class來處理這項功能。
sorry...我們才剛開始教c++啦...

memset是啥啊...我看不懂耶...

我好像太龜毛了>.<

天氣有點冷...

unread,
Mar 11, 2004, 1:05:27 PM3/11/04
to
你的問題點有三:
1. namespace 的用法.
2. setiosflags(ios::fixed) 的用法.
3. setprecision() 的用法.
我把你的程式修改成下面的樣子, 也把你該注意的部份加了註解, 至於更詳細的
用法, 你就要自己再去查查書或是到 http://www.google.com.tw 去查查相關的
資料了。

下面是修改後的程式:


#include <iostream>
#include <iomanip>
#include <cmath>

/* 下面這行指令代表你在程式中可以直接寫出像 cout 這樣的指令, 而不須寫成
std::cout 這樣的型式, 也就是名稱空間的使用方法. */
using namespace std;

int main(){
double result; //e之估計值.
double j;
/* 下面這行指令會在顯示浮點數時, 強迫顯示小數點後的數字, 預設會
顯示小數點後6位數字, 你若想要調整顯示的位數時, 必須在後面指令
中搭配 setprecision(n) 這個指令, 括號中的 n 代表你要顯示小數點
後的 n 個位數. */
cout<<setiosflags(ios::fixed);
int p = 2;


cout<<"e=(1+h)^1/h"<<endl;
for(j=0.01;j>0.0000001;j=j*0.1){

//下面的 p++ 表示每執行完一次 setprecision , p 的值會加一.
cout<<"h="<<setprecision(p++)<<j<<" e="<<result<<endl;
result=pow(1+j,(1/j));
}
}

下面是執行結果:
e=(1+h)^1/h
h=0.01 e=2.16
h=0.001 e=2.705
h=0.0001 e=2.7169
h=0.00001 e=2.71815
h=0.000001 e=2.718268
h=0.0000001 e=2.7182805

--
[1;32m※ Origin: [33mSayYA 資訊站 [37m<bbs.sayya.org> [m
[1;31m◆ From: [36mtelnet.hinet.net [m
[1;33m◆ Modify: [35m04/03/12 2:05:27 [37m<telnet.hinet.net> [m

~~~~~~Jerki~~~~~~

unread,
Mar 11, 2004, 11:11:35 PM3/11/04
to
※ 引述《devot...@bbs.sayya.org (天氣有點冷...)》之銘言:
謝謝你唷^^
說得這麼詳細~~~我懂了^^
0 new messages