簡體   English   中英

跨編譯器的 IEEE-754 二進制模式一致性的浮點文字

[英]Floating-point literal to IEEE-754 binary pattern consistency across compilers

這是一個關於“跨平台浮點一致性”的問題,但它專門討論運行時一致性(IEEE 浮點)。

我對編譯時一致性感興趣,特別是:

如果我有一個特定的浮點數,並且想要在我的源代碼中放入一個浮點文字,並且讓每個針對 IEEE-754 架構的編譯器將其編譯為實際上與浮點(或雙精度)相同的位模式:我需要做什么?

  • 一定數量的數字?
  • 該位模式的確切十進制數(而不是映射到該二進制模式的任何十進制數)?
  • 或者?

(我知道多年來一直存在爭議,您需要做什么才能將浮點值從 IEEE 格式轉換為十進制表示並返回,我不知道這是否是浮點文字和編譯器(和 C++ 標准)。)

您可以利用這樣一個事實,雖然每個十進制浮點數在 IEEE-754 浮點表示(使用二進制)中都沒有精確表示,但每個 IEEE 浮點數都有一個作為十進制浮點數的精確表示.

[lex.fcon] (“浮動文字”)中的 C++ 語言規范討論了浮點文字。 在描述了浮點文字的所有部分之后,它說

如果縮放值在其類型的可表示值范圍內,則結果是縮放值(如果可表示),否則以實現定義的方式選擇最接近縮放值的較大或較小的可表示值。

(此工作在 N3242、C++11 后期工作論文和 2018 年的 N4741 中相同。我無法在CPPReference上找到此描述。)

這意味着像0.1這樣的數字可以比期望值略小或略大,其他像0.50.000000000931322574615478515625 (2 -30 ) 的數字將在所有符合標准的編譯器中具有該值。

您需要取十進制數,在它之前或之后獲得該數字的 IEEE-754 表示,然后將該表示轉換為等效的十進制數。 一旦有了它,所有支持 IEEE-754 浮點格式的符合標准的編譯器都應該為您提供完全相同的常量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM