※ 引述《btocola@kkcity.com.tw (btocola)》之銘言:
> => 凡是「沒有經過特別容器處理」,或「沒有轉換到可以容納的內建
> 型態」(*),皆是錯誤的回答! (例如用NTL就是正確的回答)
> *:這裡很感興趣的是:有什麼「內建型態」可以容納200!的乘績?
> 凡認為前貼文者「是正確的說法」,並且「知道如何容納方式」(既
> 然認為是正確的說法,應該之前就已知容納的方式吧?) 的網友,
> 請賜教您所知方法(若有範例程式就更佳了),小弟魯鈍想學學它
> 的轉換、容納方式,在此先致謝了!^^"
上面提到的做大數運算的library或是語言我沒用過,我自己是在C++上
用MAPM,若你已知道運算過程內建型態無法容納你要運算的東西。使用
這些library應該是合理的吧!?
一個簡單的階層運算的結果,到底內建型態可不可容納?是可以在寫程
式之前就被評估出來的。無須討論有什麼「內建型態」可以容納200!的
結果。
若你經過運算的結果是可以被內建型別容納的,那有對應轉換的函式也
是合理的吧!?
MAPM網頁有段程式碼
x = 9.34231;
y = -21;
z = "-8.982349249829824921479824924792347921E-17";
w = (82.30421 + sin(x / "21.11") / exp(y * 0.0726426))
* "4.32917E-2" / z;
v = "3.742416" * log(-w);
u = sqrt(v) + cbrt(v);
printf("\n");
x.toString(obuf, 50); printf("x = [%s] \n",obuf);
y.toString(obuf, 50); printf("y = [%s] \n",obuf);
z.toString(obuf, 50); printf("z = [%s] \n",obuf);
w.toString(obuf, 50); printf("w = [%s] \n",obuf);
v.toString(obuf, 50); printf("v = [%s] \n",obuf);
u.toString(obuf, 50); printf("u = [%s] \n",obuf);
x = [9.34231000000000000000000000000000000000000000000000E+0]
y = [-2.10000000000000000000000000000000000000000000000000E+1]
z = [-8.98234924982982492147982492479234792100000000000000E-17]
w = [-4.06165846135776503301770738763183914451375637893923E+16]
v = [1.43121038693447060414449698088102300924570797933606E+2]
u = [1.71941170788317776083850581271655444461072359345223E+1]
若你得到可以被內建型態可用的值,上面就只是把字串轉到你想要的內建型
態而已。
--
※ Origin: SayYA 資訊站 <bbs.sayya.org>
◆ From: h23-74.grad.ccit.edu.tw