Double类型变量范围?

arbobo 2007-08-02 11:22:44
查看delphi帮助得到如下范围
Double 5.0 x 10^-324 .. 1.7 x 10^308
但是我给Double型变量赋值 -1, 也是可以的, 为什么没越界呢?
...全文
3336 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
FireArrow 2007-08-04
  • 打赏
  • 举报
回复
ding
LutzMark 2007-08-02
  • 打赏
  • 举报
回复
不懂 Delphi
帮顶
arbobo 2007-08-02
  • 打赏
  • 举报
回复
听明白了,
感谢comanche(太可怕) 耐心解释,
感谢yuxuanji(# I'm 马克) 参与讨论.
LutzMark 2007-08-02
  • 打赏
  • 举报
回复
果然是
double, single 和 extended 用的不是补码
呵呵,不好意思,错怪了

comanche 2007-08-02
  • 打赏
  • 举报
回复
aye, 看了你的连接, 没错, delphi 精度上达不到 ieee 规范
LutzMark 2007-08-02
  • 打赏
  • 举报
回复
http://en.wikipedia.org/wiki/Double_precision
comanche 2007-08-02
  • 打赏
  • 举报
回复
用法不同, double, single 和 extended 用的不是补码, 有专用符号位, 正负范围是同一个
用补码的正负范围是不同的, 是非专用的符号位
byte -128 ~ 127
word -32768 ~ 32767

delphi 帮助那样表示不够明确
comanche 2007-08-02
  • 打赏
  • 举报
回复
http://steve.hollasch.net/cgindex/coding/ieeefloat.html
LutzMark 2007-08-02
  • 打赏
  • 举报
回复
既然是精度
在下表里 为什么是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
comanche 2007-08-02
  • 打赏
  • 举报
回复
delphi 那个 5.0 x 10^-324 ~~ 1.7 x 10^308 说的是精度我确定, 我查了 ieee 定义后发现有不符的地方倒是不好解释
LutzMark 2007-08-02
  • 打赏
  • 举报
回复
我没有攻击。只是说事实
是range就不是precision
LutzMark 2007-08-02
  • 打赏
  • 举报
回复
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

Delphi7的help文档里说的
comanche 2007-08-02
  • 打赏
  • 举报
回复
10^-324 = ? 5.0 x (5.0)是小数点后面的数
10^308 = ? 1.7 * 是小数点前面的数

说得不对可以指正嘛, 说话带攻击行为是不礼貌的, 攻击后不说出正确答案是心术不正的
LutzMark 2007-08-02
  • 打赏
  • 举报
回复
我看了Delphi的帮助是这样的
5.0 x 10^-324 .. 1.7 x 10^308 是 "range" 即取值范围
而不是Precision “精度”
你说 1.7 x 10^308 指的是最大精度显然是不对的
请原谅我咬文嚼字 囧
comanche 2007-08-02
  • 打赏
  • 举报
回复
Sign(+-) 符号有专门的位
comanche 2007-08-02
  • 打赏
  • 举报
回复
这个是 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] 1023

double 是

11 有效精度 2^11 = 1024
52 有效位 2^52 = 4503599627370496(换句话说, 去掉小数点, 最大不能超过这个数才能表示)
LutzMark 2007-08-02
  • 打赏
  • 举报
回复
上面说明了是 "最大精度"
=======================
难道LZ是在问最大精度么?

况且 哈哈哈 哈哈
楼上都两星了还分不清什么是取值范围什么是精度?
1.7 x 10^308是精度? 哈哈
comanche 2007-08-02
  • 打赏
  • 举报
回复
上面说明了是 "最大精度"
LutzMark 2007-08-02
  • 打赏
  • 举报
回复
虽然我不懂Delphi
但是,很显然
楼上根本没看懂楼主说什么1.1234567890123456是最小的取值范围么?
如果是,为什么还能赋值-1?

comanche 2007-08-02
  • 打赏
  • 举报
回复
地球计算是够了, 更高精度要求的用定点数
加载更多回复(1)

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧