我對double和float浮點數的精度和速度有疑問。用float浮點數的雙倍分數
e.g:
double a;
a=myfun(); //returns a number with lots of decimals
float b=5.0;
double result=a/b;
會結果的變化。如果B是雙? 是否需要更多時間來計算它們是不是雙打(因爲爲了適應雙倍大小而改變浮動的大小)?
我對double和float浮點數的精度和速度有疑問。用float浮點數的雙倍分數
e.g:
double a;
a=myfun(); //returns a number with lots of decimals
float b=5.0;
double result=a/b;
會結果的變化。如果B是雙? 是否需要更多時間來計算它們是不是雙打(因爲爲了適應雙倍大小而改變浮動的大小)?
如果b是雙倍的,結果會改變嗎?
由於值爲0.5,因此結果不應改變。如果它是一個不同的值,它可能會改變,因爲double有更好的精度然後浮動。
是否需要更多時間來計算它們是否不是雙打?
是的,它的確如此。但是從浮動轉換爲雙倍的時間可以被忽略。
你試過這樣做嗎?無論如何,b在轉換過程中轉換爲double
。浮點分區是昂貴的,並且浮點分區的時間稍快。
從浮充轉換一倍或兩倍浮動之間的時間差可以忽略不計真的
看看這個link它一定會幫助你的。
在x86 FPU上沒有懲罰,因爲在加載到寄存器時,32位浮點和64位雙精度轉換爲80位擴展精度。 – ybungalobill
@ybungalobill將一個轉換爲另一個實際上是一個微型優化,但有一些處罰。請參閱[此問題和答案](http://stackoverflow.com/q/1467057/476681)。如果沒有,那麼64位雙精度需要更多的時鐘週期來傳輸。無論如何,開銷可以忽略不計。 –