什么是小数不能做,但双倍可以,反之亦然?

时间:2012-03-18 07:53:06

标签: c# floating-point double decimal

有人可以告诉小数变量不能做什么,但同时双倍可以吗?

除了十进制之外,还有什么呢?

我在找到(sqroot 5)的功率超过2000000时遇到了麻烦

e.g。 (3 + root(5))升至300000 ......这里使用二项式扩展时可以使用什么?

我可以使用双/小数吗?主要区别是什么?

注意:我想在小数点前保留最后3位小数,以回答100%的准确度。

3 个答案:

答案 0 :(得分:9)

简而言之:

  • Decimal是十进制浮点类型,因此它可以表示精确的十进制值,例如: 0.1。它具有相当高的精度,但相对有限的范围。它是用软件实现的,因此速度相对较慢。
  • Single / Double二进制浮点类型,因此它们只能表示可以用二进制精确表示的数字 - 不包括十进制值例如,0.1。它们的精度相对较低,但范围很广。它通常用硬件实现,因此非常快。

此外float / double代表正无穷大,而“不是数字” - decimal没有任何此类代码。

有关详细信息,请参阅binary floating pointdecimal floating point上的文章。

答案 1 :(得分:2)

decimal.MaxValue = 79,228,162,514,264,337,593,543,950,335

double.MaxValue = 1.7976931348623157E+308

(5.24) ^ 300000 = ???

我不认为如果不使用比双倍更加敏锐的数学库,你可以轻松地将5增加到300000的力量....

答案 2 :(得分:0)

十进制是基数10,这意味着他可以将0.1表示为0.1

double是一个基数2 - 二进制 - 这意味着他不能。 (它的无限数量为0,1)

double可以存储比十进制更大的数字

十进制更准确。