2010-12-04 56 views

回答

17

這就是C++(和C)標準所決定的。浮點文字是double類型的,如果你需要浮動文字,你可以用f作爲後綴。似乎沒有任何明確的原因說明爲什麼,但我想這是a)爲了與C兼容,並且b)在精度和存儲之間進行權衡。除非明確地 由後綴指定

2.13.3浮動文本一個FL浮動文字的類型 加倍。 後綴f和F指定float,後綴l和L指定long double。 如果縮放值不在其類型的 範圍 可表示值中,則該程序不合格。

+0

這非常明確地回答了OP的問題,不是嗎? – 2010-12-04 14:18:05

0

這可能是C世界的標準。 Double是首選,因爲它更精確,您可能不會看到任何性能差異。閱讀this post

+0

幾乎是在今天的機器上,但在FPU的嵌入式設備上我不太確定... – jokoon 2010-12-04 13:54:06

+0

@gokoon:那是真的;默認情況下,我認爲我們正在談論「普通」機器。我的意思是臺式電腦和服務器。在嵌入式設備上,優化非常重要,在某些情況下不得不在short和int之間進行選擇並不少見。 – darioo 2010-12-04 13:56:38

+0

即使使用FPU,double也需要浮點空間的兩倍,因此,當處理非常大量的數據時,即使各個寄存器級別的操作花費相同的時間長度,內存帶寬也可能變得很大。 – Clifford 2010-12-04 14:11:39

5

C和C++更喜歡double來浮動在幾個方面。正如你注意到的,除非明確地製作浮點數,否則小數文字是雙精度的。此外,浮動不能通過可變參數傳遞,它們總是被提升爲雙倍(以同樣的方式,char和short以可變參數提升爲int)。

float認爲是合同double而非double是擴展float可能更好。也就是說,double是首選的浮點類型,並且在某些特定情況下需要較小版本的double時使用float。這是我所知道的最接近一致原因的最接近的,然後這個規則是有道理的,即使你碰巧遇到了需要更小版本的情況。

1

這不是MSVC特有的,它是語言標準所要求的。

我會建議它有意義不是降低精度,除非明確要求,所以默認是雙倍。

單精度浮點提供的精度的6個有效位數很少用於一般用途,當然在現代桌面處理器上也可用作手工編碼優化,其中作者已確定它是充分和必要的;所以有必要使用一個明確的可見標記來指定單精度文字。

0

因爲double可以比float好大約3.14,也許?這裏有精確的值:

3.140000000000000124344978758017532527446746826171875(double

3.1400001049041748046875(float