Gil*_*les 6 .net c# floating-point double decimal
Double数据类型无法正确表示某些基数为10的值.这是因为浮点数代表实数.这意味着当表示货币值时,应该使用十进制值类型来防止错误.(随意更正此序言中的错误)
我想知道的是,在标准.Net框架中64位架构下的双数据类型下出现这样一个问题的值是什么(C#如果有所不同)?
我希望答案是一个公式或规则来找到这样的值,但我也想要一些示例值.
任何不能写为2的正负幂之和的数字都不能精确地表示为二进制浮点数.
用于浮点数的32位和64位表示的通用IEEE格式强加了进一步的约束; 它们限制有效数和指数中的二进制数字的数量.因此,存在最大和最小可表示数字(如果存储器服务,则大约+/- 10 ^ 308(基数-10))并且限制可以表示的数字的精度.对精度的这种限制意味着,对于64位数字,最大功率2的指数与数字中最小功率之间的差值限制为52,因此如果您的数字包含2 ^ 52中的项,则可以还包括2 ^ -1中的术语.
不能在二进制浮点数精确表示数字的简单的例子包括1/3,2/3,1/5.
由于浮点数集合(在任何表示中)是有限的,并且实数集合是无限的,因此找到不能精确表示为浮点数的实数的一种算法是选择实数随机.实数可以精确表示为浮点数的概率是0.