tsi*_*iki 5 floating-point floating-accuracy
我无法理解为什么有些数字不能用浮点数表示.
我们知道,普通浮点数会有符号位,指数和尾数.例如,为什么不能在这个系统中准确地表示0.1; 我想到的方式是你将10(1010 in bin)放到尾数,-2放到exponent.据我所知,这两个数字都可以在尾数和指数中准确表示.那么为什么我们不能准确地代表0.1?
如果你的指数是十进制的(即它代表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#也有float和double无法精确存储0.1,因为他们使用二进制指数(如在IEEE-754定义)浮点类型.二进制浮点类型使用较少的存储,更快,因为它们更容易实现,并且在它们上定义了更多操作.通常decimal仅用于财务值,其中所有十进制值的精确表示很重要,而操作的存储,速度和范围则不重要.