2011-11-16 123 views
0

我需要確定一組輸入的標準偏差。這需要(每個輸入 - 均值)^ 2的總和。我有以下代碼來執行此操作(510是測試的示例輸入):整數轉換爲雙重

int testDiff = 510;  
console.printf("testDiff = %i \r\n",testDiff); 

double testDiff_double = static_cast<double>(testDiff); 
console.printf("testDiff_double = %d \r\n",testDiff_double); 

double result = pow(static_cast<double>(testDiff),2); 
console.printf("result = %d \r\n",result); 

但是,此代碼不會生成期望的輸出(260100)。如果我打印在每個階段獲得的值,我會得到以下內容:

testDiff = 510 
testDiff_double = 0 
pow = 0 

爲什麼從整數轉換爲雙失敗?我正在使用static_cast,因此如果轉換出現邏輯問題,我期望在編譯時發生錯誤。

注意(雖然它應該沒關係):我在MBED微控制器上運行此代碼。

+0

或者使用C++流,因爲它會避免這樣的錯誤,並做正確的事,因爲編譯器會選擇如何打印類型。 –

+0

%d - >%f,%d是整數。 – Ylisar

+0

不相關,但你可能會感興趣:你計算標準偏差的方式有準確性問題,結帳這個http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance – Monkey

回答

2

因爲您使用的是%d而不是%f來顯示浮點值。

+0

是的 - 那樣做。我應該在深夜停止工作。我在編程時處理「數學」這麼少,我忘了它是%f而不是%d ... – BSchlinker

2

在您的printf函數中,請嘗試使用%f而不是%d。

1

您必須使用%f%e%E%g以顯示雙/浮點數。

printf reference page

c Character 
d or i Signed decimal integer 
e Scientific notation (mantise/exponent) using e character 
E Scientific notation (mantise/exponent) using E character 
f Decimal floating point 
g Use the shorter of %e or %f 
G Use the shorter of %E or %f 
o Unsigned octal 
s String of characters 
u Unsigned decimal integer 
x Unsigned hexadecimal integer  
X Unsigned hexadecimal integer (capital letters) 
p Pointer address 
n Nothing printed. The argument must be a pointer to a signed int, where the number of characters written so far is stored. 
% A % followed by another % character will write % to stdout.