在Java 规格说明中,它说:
对于十六进制浮点文字,至少需要一个数字(无论是整数还是分数部分),指数是强制性的,浮点类型后缀是可选的。指数由ASCII字母p或P表示,后面跟着可选的带符号整数。
据我所知,表示字母的指数必须是p或P,才能用十六进制数字E或E解决歧义。为什么它会说后缀表示类型(浮点数对双)是可选的,当使用它时会引入字母d,D,f,F的歧义,这也是十六进制数字?
发布于 2018-06-25 14:59:59
根据语法
DecimalFloatingPointLiteral:数字。数字FloatTypeSuffix。数字ExponentPart位ExponentPart FloatTypeSuffix位ExponentPart FloatTypeSuffix HexadecimalFloatingPointLiteral: HexSignificand BinaryExponent FloatTypeSuffix
对于十六进制浮点数,可选FloatTypeSuffix必须遵循强制BinaryExponent。
如果添加一个f或没有BinaryExponent的d,则它是一个十进制浮点数。
发布于 2018-06-25 15:13:53
十六进制的形式是使尾数精确。指数是一个整数,可以精确地表示为十进制,因此与字母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在这种形式下,很容易看到预期的尾数和指数。虽然其他形式是可能的,但它们并不是那么清楚。
https://stackoverflow.com/questions/51026405
复制相似问题