2012-10-24 69 views
1

我對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是雙? 是否需要更多時間來計算它們是不是雙打(因爲爲了適應雙倍大小而改變浮動的大小)?

回答

1

如果b是雙倍的,結果會改變嗎?

由於值爲0.5,因此結果不應改變。如果它是一個不同的值,它可能會改變,因爲double有更好的精度然後浮動。

是否需要更多時間來計算它們是否不是雙打?

是的,它的確如此。但是從浮動轉換爲雙倍的時間可以被忽略。

+1

在x86 FPU上沒有懲罰,因爲在加載到寄存器時,32位浮點和64位雙精度轉換爲80位擴展精度。 – ybungalobill

+0

@ybungalobill將一個轉換爲另一個實際上是一個微型優化,但有一些處罰。請參閱[此問題和答案](http://stackoverflow.com/q/1467057/476681)。如果沒有,那麼64位雙精度需要更多的時鐘週期來傳輸。無論如何,開銷可以忽略不計。 –

0

你試過這樣做嗎?無論如何,b在轉換過程中轉換爲double。浮點分區是昂貴的,並且浮點分區的時間稍快。

1

從浮充轉換一倍或兩倍浮動之間的時間差可以忽略不計真的

看看這個link它一定會幫助你的。