Floating point 理解浮点表示错误;什么';我的想法怎么了?
我很难理解为什么有些数字不能用浮点数来表示 正如我们所知,一个正常的浮点将有符号位、指数和尾数。例如,为什么不能在这个系统中准确地表示0.1;我的想法是,你把10(1010在箱子里)放在尾数上,把-2放在指数上。据我所知,这两个数字都可以用尾数和指数来精确表示。那么为什么我们不能精确地表示0.1呢?那将是10×2-1=5,而不是0.1 一般来说,这就像用十进制表示三分之一:用有限的数字是不可能的Floating point 理解浮点表示错误;什么';我的想法怎么了?,floating-point,floating-accuracy,Floating Point,Floating Accuracy,我很难理解为什么有些数字不能用浮点数来表示 正如我们所知,一个正常的浮点将有符号位、指数和尾数。例如,为什么不能在这个系统中准确地表示0.1;我的想法是,你把10(1010在箱子里)放在尾数上,把-2放在指数上。据我所知,这两个数字都可以用尾数和指数来精确表示。那么为什么我们不能精确地表示0.1呢?那将是10×2-1=5,而不是0.1 一般来说,这就像用十进制表示三分之一:用有限的数字是不可能的 顺便说一下,1010=10102≠ 11002.如果指数是十进制的(即代表10^X),则可以精确地表
顺便说一下,1010=10102≠ 11002.如果指数是十进制的(即代表10^X),则可以精确地表示0.1——但是,大多数浮点格式使用二进制指数(即代表2^X)。由于没有整数
X
和Y
,因此Y*(2^X)=0.1
,因此在大多数浮点格式中无法精确表示0.1
有些语言的类型同时具有两个指数。例如,在C#中,有一种数据类型被恰当地命名为decimal
,这是一种带有十进制指数的浮点格式,因此它将支持存储类似于0.1的数字,尽管它还有其他不常见的属性:decimal
类型可以区分0.1
和0.10
,而且x+1!=x
用于x
的所有值
不过,出于最常见的目的,C#还有
浮点
和双
浮点类型,它们不能精确存储0.1,因为它们使用二进制指数(如IEEE-754中定义的)。二进制浮点类型使用更少的存储空间,速度更快,因为它们更容易实现,并且定义了更多的操作。一般来说,decimal
仅用于财务值,其中所有十进制值的精确表示非常重要,而存储、速度和操作范围则不重要。您考虑的是1*10^-1,它适用于表示,例如C#中的十进制。普通浮点(如float、double)使用二进制表示,即2的幂
通常使用二进制,因为它们可以更有效地按位排列。十进制通常在需要绝对十进制精度时使用,例如在计算货币时。您必须开始读取
退房: