Floating point 十进制到二进制-为什么可以';t小数点的左侧和右侧是否可以转换为二进制,就像两侧都是整数一样?

Floating point 十进制到二进制-为什么可以';t小数点的左侧和右侧是否可以转换为二进制,就像两侧都是整数一样?,floating-point,Floating Point,0.2不能用浮点表示,因为0.2到二进制的转换正在重复。但是,为什么在转换为二进制时,十进制的右侧不能被视为整数呢?也就是说,0.2在二进制中是0.10,因为0将转换为0,2将转换为10?您所描述的内容似乎与某些浮点系统(如Java)非常接近。它将数字存储为整数和小数比例因子的组合 如果小数的精确表示特别重要,那么这种系统是有用的。也就是说,如果1/5的精确表示比1/3的精确表示重要得多 二进制浮点的最大优点是,它可以提供非常紧凑的表示形式,便于硬件运算和寄存器存储。要获得相同的值,必须将其视为

0.2不能用浮点表示,因为0.2到二进制的转换正在重复。但是,为什么在转换为二进制时,十进制的右侧不能被视为整数呢?也就是说,0.2在二进制中是0.10,因为0将转换为0,2将转换为10?

您所描述的内容似乎与某些浮点系统(如Java)非常接近。它将数字存储为整数和小数比例因子的组合

如果小数的精确表示特别重要,那么这种系统是有用的。也就是说,如果1/5的精确表示比1/3的精确表示重要得多


二进制浮点的最大优点是,它可以提供非常紧凑的表示形式,便于硬件运算和寄存器存储。

要获得相同的值,必须将其视为除以10,而不是2的幂。我不这么认为。得到什么相同的值?什么除以10?你能再详细一点吗?嗯,你刚才描述了那个表示法,所以可以这样做。但它不一定是一种聪明的表现。例如,
0.1100011
0.1100100
似乎很接近,但按照您的惯例,一个表示
0.99
,另一个表示小数位数
0.100
(即“0.99”与“0.100”)。我想说的是,人们已经知道了更聪明的十进制数字表示法。也许我不理解你的符号,或者你正在重新发明二进制编码的十进制。你能再举几个例子吗?给出表示法背后的原则?你不能将分数部分视为简单的十进制数字,因为你需要区分.2与.02和.002。此外,1/3的分数部分是.33333…,因此它不能表示为有限整数,所以像这样的系统仍然必须将数字舍入到可表示的值。啊,有趣的是,我没有意识到这个类是Java特有的吗?你所说的1/3的精确表示是什么意思?即使在浮点运算中,这也是不可能的,是吗?@fahimg23 java.math.BigDecimal是特定于java的,但许多编程语言在精确表示小数方面都有类似的功能。还有一些有理数包可以表示任意一对整数的比率,包括1/5和1/3。如果您需要两者都精确,请使用其中一种,如果您同意舍入1/3,但不同意舍入1/5,请使用十进制数据类型。如果您对两者的舍入误差都满意,请使用double。