請問C語言如何處理20位小數甚至更多位的小數呢?
double是不夠用的吧?
2007-10-03 10:58:06 · 2 個解答 · 發問者 pianoboy 2 in 電腦與網際網路 ➔ 程式設計
0. double 是 8 bytes = 64 bits
1. 標準答案:用陣列(或 struct (C 沒有 Class))去做。
如:(示意,細節可能不同,也應該有錯)
struct FLOAT { int maxDigit, int nowDigit, *value; };
maxDigit 表示它最多存幾位;
nowDigit 表示現在只用了幾位;
value 則是存值的陣列。
當然, - * / 等都得自己寫囉!
2. 用 long double!
注意:long double 不是 C 的標準型態!
所以,不是所有的 Compiler 都支援!就我所知,有支援的 compiler有下列三類:
A. 空支援名稱,完全等於 double。多數 Compiler 屬於此類。
B. 80 bits 版,如:16 bits 版的 VC。32 bits VC / VS是 A. 型:空有名稱!
C. 96 bits 版,如:Dev C++
另外,要注意:(下列純就個人所知,可能有出入!)
A. 有支援的 compiler 都只有在 C++ 下才有它的函數!
在C只有基本運算!
B. 在 C,沒有 printf 的 format 支援 long double!
真的要印出全部的值:
a. 請自己寫程式!
b. 請用 C 的 cout!(確定可以)
2007-10-03 22:27:17 補充:
b. 請用 C++ 的 cout!(確定可以)
(++又被吃掉了!)
2007-10-04 07:50:46 補充:
應該說:不是空支援名稱的 Compiler 在 C 是要用其它的函數。
如:sin(th) -> sinl(th)
在 C++,因為 function overload,Compiler 自己會找到 long double 的版,做 long double 的運算。
2007-10-03 18:24:30 · answer #1 · answered by ? 5 · 0⤊ 0⤋
所以就有聰明的程式設計師用「陣列」來儲存更多位數的數值。
2007-10-03 16:57:25 · answer #2 · answered by Big_John-tw 7 · 0⤊ 0⤋