我做2^1000和正在此:如何避免大數量的科學記數法?
1.07151e + 301
有沒有辦法真正變成一個適當數量的這種無E + 301或至少誰能告訴我在哪裏我可以看到如何把這個爲實數,通過某種方式與E + 301的部分工作
感謝
我做2^1000和正在此:如何避免大數量的科學記數法?
1.07151e + 301
有沒有辦法真正變成一個適當數量的這種無E + 301或至少誰能告訴我在哪裏我可以看到如何把這個爲實數,通過某種方式與E + 301的部分工作
感謝
所以,我在想,你真正想要的只是打印出來沒有科學記數法的能力。如果您使用printf
,你想要的是:
printf("%f1000.0", value);
// note that 1000 is way larger than need be,
// I'm just too lazy to count the digits
隨着cout
,你可以試試:
cout.setf(ios::fixed);
cout << setprecision(0) << value;
如果你想打印爲兩(2^1000 VS 10715電源...),你自己。
你需要使用專門爲長的數字設計了許多類。
要將2^1000表示爲一個確切的數字,那麼根據定義,您需要一個實際上保存1001個二進制位的數字格式。最長的普通原始整數格式通常只有64位。
順便說一句,得到的答覆是:
% perl -Mbigint -e 'print 2**1000'
10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
固定糾正差一錯誤 – Alnitak 2008-11-05 14:44:24
如果你嘗試採取從Mbigint perl的,幻影會打敗你,並給它回給他們。搶侏儒部落並不好。除非你是印第安納瓊斯。 – 2008-11-05 14:45:45
你得到的精確數字作爲變量的類型可以支持。這個數字大約是1,然後是301個零。爲了得到一個精確的數字,你必須使用一個支持大數字的庫,或者使用爲這種數學(楓,matlab等)編寫的語言來工作
對於可以直接在機器寄存器中操作的數量很大。如果使用雙精度浮點數,總共有64位,其中一些用於尾數,一些用於指數,1用於符號位。
2^1000需要一個1001比特的整數來表示而不會失去精度。爲了處理這樣的數字,您需要使用支持大數字的庫,例如GNU MP。
cout < < fixed < < your_number;
但它不會顯示整個數字。正如有人之前所說,你需要寫一個班級。
如果你想用C++自己做,你可以例如創建一個數字數組並自己做計算。測試和驗證,例如:
unsigned int result[400]; // result digits
unsigned int i, j, carry;
// Initialize result digits
for (i = 0; i < 399; i++) {
result[i] = 0;
}
result[399] = 2;
for (i = 2; i <= 1000; i++) { // Calculate 2^i
carry = 0;
for (j = 399; j > 0; j--) {
result[j] <<= 1; // multiply with 2
result[j] += carry; // add carry
carry = result[j]/10;
result[j] %= 10; // we want one digit (0-9) only
}
}
printf("2^1000 = ");
// print result digits
for (i = 0; i < 400; i++) {
if (result[i] != 0) { // no leading zeros, please
for (j = i; j < 400; j++) {
printf("%d", result[j]);
}
break;
}
}
printf("\n");
一種選擇,如果你的應用程序邏輯將允許它要改變單位你操縱....
如果正在測量從紐約的距離巴黎埃,選擇英里或公里來代替。 ...除了純粹的數學要求(比如說說密碼學的素數,或者......對雷曼假說的研究),很少有任何需要保留這麼多數字的準確性。
在另一方面,如果你正在做的事情,需要完全準確的整數值與許多數字,那麼你或許應該得到設計來處理大量的專業軟件......這樣的軟件絕對是可用的,雖然我不熟悉那個領域。 (成本,供應商的能力等) 如果成本是一個問題,你在想自己去寫,我不知道有足夠的瞭解什麼是參與在知道這種做法是值得的......
包含頭limits.h
和cmath.h
cout.precision(0);
cout<< fixed<< pow(2,31); //OR ANY NUMBER HERE
使用cout.precision設置精度。
也許這是從這裏來的? http://projecteuler.net/index.php?section=problems&id=16 – 2008-11-05 14:26:02
在二進制很簡單 - 一個接着1000零1。創建一個簡單的算法來進行長分區,然後對其進行排序(重複除以1010並累加餘數)。 – Skizz 2008-11-05 14:37:13
它是一個合適的數字。 – 2018-03-05 11:09:01