首頁  >  文章  >  後端開發  >  為什麼 Printf() 將浮點數提升為雙精度?

為什麼 Printf() 將浮點數提升為雙精度?

DDD
DDD原創
2024-11-17 08:09:03454瀏覽

Why does Printf() promote floats to doubles?

深入探討:為什麼Printf() 將浮點數提升為雙精確度浮點數

Printf() 之所以將float 參數提升為double,不只是因為它是一個變參函數。根據 C 標準和 C 標準,所有變參函數的 float 參數都會在傳遞之前提升為 double。

C99 標準第6.5.2.2 節明確規定:"[...]浮點型參數提升為double。這些稱為預設參數提升。[...]"

C 標準草案第5.2.2節也闡明:"[...]浮點類型參數若受浮點提升(4.6)的影響,則在呼叫之前,參數值會轉換為提升後的型別。[...]"

此外,第4.6 節指出:"float 類型的pr 值可以轉換為double 類型的pr 值。值保持不變。"

Cppreference 很好地總結了 C中變參函數的預設轉換:"

  • std::nullptr_t 轉換為void*
  • float 參數轉換為double,與浮點提升一致
  • bool 、char、short 和無域枚舉轉換為int或更寬的整數,與整數提升一致

在C 語言中,這種轉換是出於對K&R C 的兼容性考慮。中明確指出:"為了與過去的實踐兼容,在沒有原型聲明的情況下,所有參數提升都按K&R 描述的那樣進行,包括float 到double的提升。 "

以上是為什麼 Printf() 將浮點數提升為雙精度?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn