![](/img/trans.png)
[英]Function that returns whether the floating-point type is fully compliant to 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.5
或0.000000000931322574615478515625
(2 -30 ) 的數字將在所有符合標准的編譯器中具有該值。
您需要取十進制數,在它之前或之后獲得該數字的 IEEE-754 表示,然后將該表示轉換為等效的十進制數。 一旦有了它,所有支持 IEEE-754 浮點格式的符合標准的編譯器都應該為您提供完全相同的常量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.