我有一個內聯函數進行頻率到週期的轉換。計算精度必須使用類型長,而不是類型雙。否則,它可能會導致一些舍入錯誤。該功能然後將結果轉換回double。我想知道在下面的代碼中,哪一行將保持計算類型長。無論參數欄是100,100.0還是33.3333。類型爲「long」的C++計算
double foo(long bar)
{
return 1000000/bar;
return 1000000.0/bar;
return (long)1000000/bar;
return (long)1000000.0/bar;
}
我自己試了一下,第四行工作。但在這種情況下,只是想知道類型轉換的概念。
編輯:
其中一個錯誤的是37038分之1000000= 26,不26.9993。
大家知道,存儲在double中的整數值不會有舍入誤差,除非它超出了尾數的範圍,通常是2 ** 52。 –
當長時間通過時bar不能爲33.3333。它將被轉換爲33. – Axel
bar不可能是'100.0'或'33.3333'。你應該使用1000000L作爲常數。 – stefan