簡體   English   中英

Java十六進制浮點文字歧義

[英]Java Hexadecimal Floating Point Literal Ambiguity

在Java 規范中 ,它說如下:

對於十六進制浮點文字,至少需要一個數字(在整數或小數部分中),並且指數是必需的,浮點類型后綴是可選的。 指數由ASCII字母p或P表示,后跟可選的有符號整數。

據我所知,指示字母的指數必須是p或P來解決十六進制數字e或E的歧義。為什么然后說明后綴指示類型(float vs double)是可選的,當使用它時會引入歧義字母d,D,f,F,它們也是十六進制數字?

根據語法

 DecimalFloatingPointLiteral: Digits . [Digits] [ExponentPart] [FloatTypeSuffix] . Digits [ExponentPart] [FloatTypeSuffix] Digits ExponentPart [FloatTypeSuffix] Digits [ExponentPart] FloatTypeSuffix HexadecimalFloatingPointLiteral: HexSignificand BinaryExponent [FloatTypeSuffix] 

對於十六進制浮點數,可選的FloatTypeSuffix 必須遵循強制BinaryExponent

如果添加沒有BinaryExponentfd ,則它是十進制浮點數。

十六進制形式是使尾數精確。 指數是一個整數,可以精確地表示為小數,因此不會與字母d或f沖突。

標准化的浮點數是形式

sign * 1.mantissa * 2 ^ exponent

如果你看一下這些例子,預計在准確指定尾數時會使用六進制十進制表示法。

// from java.lang.Double

public static final double MAX_VALUE = 0x1.fffffffffffffP+1023; // 1.7976931348623157e+308

public static final double MIN_NORMAL = 0x1.0p-1022; // 2.2250738585072014E-308

public static final double MIN_VALUE = 0x0.0000000000001P-1022; // 4.9e-324

在這種形式中,很容易看到預期的尾數和指數。 雖然其他形式可能,但它們並不那么清楚。

暫無
暫無

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

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