爲什麼我需要將3.14f而不是3.14來禁用所有這些警告? 這有一個連貫的原因嗎?爲什麼浮點值如3.14在MSVC中默認被認爲是double?
回答
這就是C++(和C)標準所決定的。浮點文字是double類型的,如果你需要浮動文字,你可以用f
作爲後綴。似乎沒有任何明確的原因說明爲什麼,但我想這是a)爲了與C兼容,並且b)在精度和存儲之間進行權衡。除非明確地 由後綴指定
2.13.3浮動文本一個FL浮動文字的類型 加倍。 後綴f和F指定float,後綴l和L指定long double。 如果縮放值不在其類型的 範圍 可表示值中,則該程序不合格。
這可能是C世界的標準。 Double是首選,因爲它更精確,您可能不會看到任何性能差異。閱讀this post。
C和C++更喜歡double來浮動在幾個方面。正如你注意到的,除非明確地製作浮點數,否則小數文字是雙精度的。此外,浮動不能通過可變參數傳遞,它們總是被提升爲雙倍(以同樣的方式,char和short以可變參數提升爲int)。
將float
認爲是合同double
而非double
是擴展float
可能更好。也就是說,double
是首選的浮點類型,並且在某些特定情況下需要較小版本的double
時使用float
。這是我所知道的最接近一致原因的最接近的,然後這個規則是有道理的,即使你碰巧遇到了需要更小版本的情況。
這不是MSVC特有的,它是語言標準所要求的。
我會建議它有意義不是降低精度,除非明確要求,所以默認是雙倍。
單精度浮點提供的精度的6個有效位數很少用於一般用途,當然在現代桌面處理器上也可用作手工編碼優化,其中作者已確定它是充分和必要的;所以有必要使用一個明確的可見標記來指定單精度文字。
因爲double
可以比float
好大約3.14,也許?這裏有精確的值:
3.140000000000000124344978758017532527446746826171875(double
)
3.1400001049041748046875(float
)
- 1. 爲什麼Swift的默認值是雙浮點數?
- 2. 爲什麼Reduux在Redux中默認稱爲默認值?
- 3. 爲什麼浮點操作被認爲是昂貴的?
- 4. 默認浮點值
- 5. 爲什麼不是默認
- 6. 爲什麼AllowPartiallyTrustedCallers不是默認值?
- 7. SQL:爲什麼varchar(50)是默認值?
- 8. 爲什麼Solr默認多值爲真?
- 9. 什麼是Page.ResponseEncoding默認值?
- 10. 什麼是GOMAXPROCS默認值
- 11. 什麼是ContinueWith默認值
- 12. 什麼是PHImageRequestOptionsResizeMode默認值?
- 13. WebRequest.Proxy - 什麼是默認值
- 14. 爲什麼我的WTForm HiddenField沒有被設置爲默認值?
- 15. 爲什麼Redis被認爲是CP?
- 16. 爲什麼'\\'被認爲是int?
- 17. 如何將空值轉換爲默認值(浮點數)或0
- 18. 將默認數值類型更改爲在matlab中浮點型
- 19. 什麼是Java浮動默認精度
- 20. Mongoid默認範圍覆蓋默認值。爲什麼?
- 21. 爲默認值
- 22. 爲默認值
- 23. 爲什麼默認值不使用Django
- 24. 爲什麼jgit默認
- 25. Python3 - 默認值爲type的默認值?
- 26. iscroll的默認行爲是什麼。
- 27. performDefaultHandlingForAuthenticationChallenge的默認行爲是什麼:?
- 28. 爲什麼UIBarButtonItem默認是禁用的?
- 29. 爲什麼'infix`是默認的
- 30. ng-submit的默認行爲是什麼?
這非常明確地回答了OP的問題,不是嗎? – 2010-12-04 14:18:05