所有主要x86系统中Double类型可以准确表示的最小(负)整数值是多少?

时间:2010-09-10 19:58:46

标签: types floating-point double

在所有主要x86系统中,Double类型可以准确表示的最小(负)整数值是多少?特别是(同时)JVM,MySQL,MS SQL Server,.Net,PHP,Python和JavaScript(无论它使用何种类型)。

我之所以这样问是因为我想选择一个值来表示错误(如果无法成功计算,则从函数返回) - 这就是为什么我需要一个确切的值对于完全相等的检查,100%可预测。异常(try-catch)似乎工作得慢得多 - 这就是我需要这样的东西的原因。

3 个答案:

答案 0 :(得分:0)

您的大多数语言和数据库产品都将使用IEEE Standard 754单打和双打。在C和C ++中,您可以使用单扩展格式和双扩展格式,但这些是依赖于体系结构的格式。您的高级平台中立语言和数据库可能会避免暴露这些。

根据IEEE标准754,您忽略双重可以存储无限和-Infinity和NaN然后:

  • 最大正常数:1.7976931348623157e + 308
  • min正常正常数:2.2250738585072014e-308
  • 最大次正规数:2.2250738585072009e-308
  • min正次正规数:4.9406564584124654e-324

对于x86双扩展格式:

  • max normal 1.18973149535723176505e + 4932
  • min positive normal:3.36210314311209350626e-4932
  • max subnormal:3.36210314311209350608e-4932
  • min positive subnormal:3.64519953188247460253e-4951

它有双重意义:

  • 重要数字(二进制​​):53
  • 最小正正常数:2.225 ... 10 -308
  • 最大正数1.797 ... 10 308
  • 重要数字(十进制):15-17

双扩展(x86)有:

  • 重要数字(二进制​​):64
  • 最小正正常数:3.362 ... 10 -4932
  • 最大正数1.189 ... 10 4932
  • 重要数字(十进制):18-21

答案 1 :(得分:0)

double(根据IEEE 754)有52位尾数+ 1个最重要的尾数位,未在格式为iself中表示(因为此位始终= = 1表示归一化数字)。
因此,max int完全可以作为double表示(2 ^ 53-1)而min min是 - (2 ^ 53-1), 大约+ - 8个四分之一(或长级数字命名系统中的台球)

答案 2 :(得分:0)

在吱吱作响的Smalltalk中,我们有这个方法

maxExactInteger
    "Answer the biggest integer such that it is exactly represented in a float, and all smaller integers also are"
    ^1 bitShift: self precision

对于双精度,精度为53(53位尾数,其中包含隐含的一个)。 是的,当然,2 ^ 53正好表示,所有较小的正整数也是如此,但是2 ^ 53 + 1不是,它需要54位,并且将四舍五入为2 ^ 53 ...

负数相同,最小的是-2 ^ 53(IEEE 754浮点表示中没有2补码技巧,只是一个符号位)。