Java 每一个双重价值都是理性的吗?

Java 每一个双重价值都是理性的吗?,java,Java,每双精度是一个有理数(不包括特殊值[Infinity,-Infinity,NaN])?基于以下逻辑,我倾向于说“是”: 尾数有一个可以表示为十进制的值,可以是分子 可以将指数转换为分母,以便根据需要放大和缩小结果 这个逻辑正确吗?如果不正确,它有什么问题?有没有反例证明双值是不合理的?这个逻辑似乎正确 计算机只能使用有限的空间,这意味着它们只能在内存中表示有理数(当使用双精度格式时),因为无理数是由无限个数字组成的,不会重复 然而,仔细想想,你可以存储一个定义数字的函数的可执行代码,有理与否

每双精度是一个有理数(不包括特殊值[Infinity,-Infinity,NaN])?基于以下逻辑,我倾向于说“是”:

  • 尾数有一个可以表示为十进制的值,可以是分子
  • 可以将指数转换为分母,以便根据需要放大和缩小结果

这个逻辑正确吗?如果不正确,它有什么问题?有没有反例证明双值是不合理的?

这个逻辑似乎正确


计算机只能使用有限的空间,这意味着它们只能在内存中表示有理数(当使用双精度格式时),因为无理数是由无限个数字组成的,不会重复

然而,仔细想想,你可以存储一个定义数字的函数的可执行代码,有理与否,但这并不适用于每一个无理函数,更重要的是,这不是
double
的工作方式


至于特殊价值,我不这么认为。无穷远并不是一个真正的数字,所以我发现很难定义为理性或非理性。NaN也是一样(根据定义,它不是一个数字)。

你似乎是正确的,双倍的,至少IEEE 754以2为基数是合理的

有了IEEE 754,您就有了

x = s * m * b^e
s
是符号,
m
是尾数,
b
是基数2,
e
是指数


因为
s
m
b
e
都是整数,
x
必须是有理数。

是的,每一个双精度都是有理数。从来没有真正考虑过它,但因为至少在Java中定义的
双精度是有限的,为什么不能表示为有理数,例如
1/3=0.33333333=33333333333/100000000
?只是因为我们讨论的是有限数量的位。。你不需要改变来表示任何像π这样的无理性。@SamIam关于
Double.NaN
?@progyamer
NaN
实际上不是一个数字。@progyamer那不是一个数字计算机只能使用有限的空间,这意味着它们只能在内存中表示有理数,因为无理数是由无限个数字组成的“-如果浮点数的基数是π而不是2,则可以在有限的空间中表示一些无理数。因此,它不是关于有限的空间,而是关于double的格式。@lexicore此语句假定为
double
格式。关键是,对于无限位数,您可以表示无理数(采用
double
格式)。