首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解浮点表示错误;我的思维有什么问题?

理解浮点表示错误;我的思维有什么问题?
EN

Stack Overflow用户
提问于 2011-06-08 15:08:42
回答 3查看 2.4K关注 0票数 5

我很难理解为什么有些数字不能用浮点数来表示。

正如我们所知道的,正常的浮点数应该有符号位、指数和尾数。例如,为什么0.1不能在这个系统中准确地表示;我认为它的方式是你把10 (1010 in bin)放到尾数上,把-2放到指数上。据我所知,这两个数字都可以用尾数和指数准确地表示出来。那么为什么我们不能准确地表示0.1呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-08 15:12:16

如果您的指数是十进制(即表示10^X),则可以精确地表示0.1 --然而,大多数浮点格式使用二进制指数(即它们表示2^X)。因为没有像Y * (2 ^ X) = 0.1这样的整数XY,所以您不能在大多数浮点格式中精确地表示0.1。

有些语言的类型同时具有两个指数。例如,在C#中,有一种名为decimal的数据类型,这是一种带有十进制指数的浮点格式,因此它将支持存储像0.1这样的数字,尽管它有其他不常见的属性:decimal类型可以区分0.10.10,并且x + 1 != x对于x的所有值总是正确的。

然而,对于最常见的目的,C#也有floatdouble浮点类型,它们不能精确地存储0.1,因为它们使用二进制指数(如IEEE754中所定义)。二进制浮点类型使用的存储空间更少,速度更快,因为它们更容易实现,并且在其上定义了更多的操作。通常,decimal仅用于金融值,其中所有十进制值的精确表示很重要,而存储、速度和操作范围并不重要。

票数 8
EN

Stack Overflow用户

发布于 2011-06-08 15:17:18

您必须开始阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic

查看:

  • Floating-Point Number Tutorial
  • Tutorial: Floating-Point Binary
票数 3
EN

Stack Overflow用户

发布于 2011-06-08 15:13:27

您正在考虑1* 10^-1,它适用于decimal floating number表示,例如C#中的decimal。普通浮点数(如浮点数、双精度数)使用二进制表示法,即2的幂

通常,使用二进制是因为它们可以更有效地按位排列。Decimal通常在需要绝对小数精度时使用,例如在计算货币时。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6275327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档