2013-03-28 32 views
-3

所以我有一個程序在不同的基礎上表示小數,並且由於它的性質,可能會顯示無限的小數位數。但是當我嘗試base 2並輸入.258時,它會給出01000010000011000100100110111010010111100011010101但在那裏停止,即使我確定它是重複小數。 重要的是要注意,程序不會存儲數字,而是在獲取它們後立即顯示個別數字,然後及時將它們忘記。這裏是代碼:錯誤地乘以

#include <iostream> 
#include <math.h> 
using namespace std; 
int main(int argc, const char * argv[]) 
{ 
    double a; 
    double b; 
    cout << "input base then input the decimal\n"; 
    cin >> a >> b; 
    while (b) { 
     b*=a; 
     cout << int(b); 
     b-=floor(b); 
    } 
} 
+0

查看GNU MPFR庫的高精度數字:http://www.mpfr.org/。 – Will

+0

您沒有無限位數來編碼十進制值。因此截斷的結果。 –

+0

*「我確定它是一個重複的小數點」*您說得對,它需要無限的位數來存儲。你在問爲什麼沒有使用無數位? –

回答

3

你的變量b是一個雙精度浮點變量。您存儲在其中的值是最接近0.258的可表示值。與所有二進制浮點值一樣,此值具有終止的二進制擴展。畢竟,你將它存儲在一個64位寬的變量中。

您的期望不正確。雖然存儲在b中的號碼可能具有重複的十進制表示,但二進制表示必須終止。

+0

+1我懷疑*重複二進制數字*是針對有關decinal .258的問題。 –

+0

好的,謝謝。我仍然不熟悉C++編程,所以這很有幫助。 另外我覺得有趣的是,我的Ti-84計算器可以運行一個類似的程序罰款任何小數位數。 – user2221796

+0

@user小數位和二進制位之間有很大差異。 –