查看delphi帮助得到如下范围
Double 5.0 x 10^-324 .. 1.7 x 10^308
但是我给Double型变量赋值 -1, 也是可以的, 为什么没越界呢?

解决方案 »

  1.   

    Double 5.0 x 10^-324 .. 1.7 x 10^308 15-16 8
    10^-324 .. 1.7 x 10^308 指的是最大精度
    这个讲有效位数, 15-16, 只有 15-16 个数字有效, 12345678901234567890 就超界(20有效位), 1.12345678901234567890 就会被截断成 1.1234567890123456(截断成 16 有效位)
      

  2.   

    虽然我不懂Delphi
    但是,很显然
    楼上根本没看懂楼主说什么1.1234567890123456是最小的取值范围么?
    如果是,为什么还能赋值-1?
      

  3.   

    上面说明了是 "最大精度"
    =======================
    难道LZ是在问最大精度么? 况且  哈哈哈 哈哈
    楼上都两星了还分不清什么是取值范围什么是精度?
    1.7 x 10^308是精度? 哈哈
      

  4.   

    这个是 ieee float 一般定义, 我这里版本老了, 现在可能有新的, delphi 应该用的是新的                        Sign(+-) Exponent(E)    Fraction(有效位) Bias
    Single Precision  1 [31]   8 [30-23]  23 [22-00]   127
    Double Precision  1 [63]   11 [62-52]  52 [51-00]   1023double 是 11 有效精度 2^11 = 1024
    52 有效位 2^52 = 4503599627370496(换句话说, 去掉小数点, 最大不能超过这个数才能表示)
      

  5.   

    我看了Delphi的帮助是这样的
    5.0 x 10^-324 .. 1.7 x 10^308 是 "range" 即取值范围
    而不是Precision “精度”
    你说 1.7 x 10^308 指的是最大精度显然是不对的
    请原谅我咬文嚼字 囧
      

  6.   

    Type Range Significant digits Size in bytes
    Real48 2.9 x 10^-39 .. 1.7 x 10^38 11-12 6
    Single 1.5 x 10^-45 .. 3.4 x 10^38 7-8 4
    Double 5.0 x 10^-324 .. 1.7 x 10^308 15-16 8
    Extended 3.6 x 10^-4951 .. 1.1 x 10^4932 19-20 10
    Comp -2^63+1 .. 2^63 -1 19-20 8
    Currency -922337203685477.5808.. 922337203685477.5807 19-20 8Delphi7的help文档里说的
      

  7.   

    我没有攻击。只是说事实
    是range就不是precision 
      

  8.   

    delphi 那个 5.0 x 10^-324 ~~ 1.7 x 10^308 说的是精度我确定, 我查了 ieee 定义后发现有不符的地方倒是不好解释
      

  9.   

    既然是精度
    在下表里 为什么是Range而不是Precision呢?
    为什么Comp类型带有符号而Double类型不带符号呢?
    Type Range Significant digits Size in bytes
    Real48 2.9 x 10^-39 .. 1.7 x 10^38 11-12 6
    Single 1.5 x 10^-45 .. 3.4 x 10^38 7-8 4
    Double 5.0 x 10^-324 .. 1.7 x 10^308 15-16 8
    Extended 3.6 x 10^-4951 .. 1.1 x 10^4932 19-20 10
    Comp -2^63+1 .. 2^63 -1 19-20 8
    Currency -922337203685477.5808.. 922337203685477.5807 19-20 8
      

  10.   

    http://steve.hollasch.net/cgindex/coding/ieeefloat.html
      

  11.   

    用法不同, double, single 和 extended 用的不是补码, 有专用符号位, 正负范围是同一个
    用补码的正负范围是不同的, 是非专用的符号位
    byte -128 ~ 127
    word -32768 ~ 32767delphi 帮助那样表示不够明确
      

  12.   

    http://en.wikipedia.org/wiki/Double_precision
      

  13.   

    aye, 看了你的连接, 没错, delphi 精度上达不到 ieee 规范
      

  14.   

    果然是 
    double, single 和 extended 用的不是补码
    呵呵,不好意思,错怪了
      

  15.   

    听明白了,
    感谢comanche(太可怕) 耐心解释,
    感谢yuxuanji(# I'm 马克) 参与讨论.