楼主: baiygggg
2831 9

[其他] Stata 中最奇怪的现象,求解! [推广有奖]

  • 0关注
  • 3粉丝

讲师

13%

还不是VIP/贵宾

-

威望
0
论坛币
315 个
通用积分
13.5978
学术水平
11 点
热心指数
17 点
信用等级
11 点
经验
1230 点
帖子
316
精华
0
在线时间
442 小时
注册时间
2009-11-3
最后登录
2021-10-25

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
数据中输入一个数据:3.81,但用一些方法判断该数是否等于3.81时得到的却是不等,通过反复试验,用下面语句查看,
list if  v>=3.8099999427795412379000 &  v<3.8099999427795412379001
却列出了3.81这个值,说明在这两个数之间(不能取更多的小数位数了)
这并不是偶然,其他小数也可能遇到这样的情况(用判断语句可以看出不等于实际值,不包括最后一位为5的一位小数),不解,求解中....................
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Stata tata list IST

沙发
baiygggg 发表于 2010-11-25 23:36:18 |只看作者 |坛友微信交流群
没注意开始多加了个等号,进一步实验,证明list if  v==3.8099999427795412379000

使用道具

藤椅
baiygggg 发表于 2010-11-25 23:37:46 |只看作者 |坛友微信交流群
证明在Stata中3.81=3.8099999427795412379?

使用道具

板凳
蓝色 发表于 2010-11-26 07:32:44 |只看作者 |坛友微信交流群
见下列的帖子中的回复
http://www.pinggu.org/bbs/viewth ... ge=1&extra=page%3D1

页面提取自- u_页面_1.jpg (236.52 KB)

页面提取自- u_页面_1.jpg

使用道具

报纸
kkwei 发表于 2010-11-26 10:03:53 |只看作者 |坛友微信交流群
这个问题不是很简单么,计算机用二进制编码的,有些数无法进行准确表示

使用道具

地板
蓝色 发表于 2010-11-26 10:35:00 |只看作者 |坛友微信交流群
kkwei 发表于 2010-11-26 10:03
这个问题不是很简单么,计算机用二进制编码的,有些数无法进行准确表示
这是stata公司手册的解释,毕竟软件是人家做的啊。
难道,你还有更好的解释吗?

使用道具

7
baiygggg 发表于 2010-11-26 15:52:02 |只看作者 |坛友微信交流群
但是就一位小数都存在问题,而且不是个别的,换个角度考虑,既然v[1]=3.81存储时实际存储值是3.8099999427795412379,那么判断这个v[1]是否等于3.81时,这里引用的仍然是3.81,它在计算机中表示出来也是那一长串数字,也就是说还是应该相等啊?

使用道具

8
baiygggg 发表于 2010-11-26 16:25:27 |只看作者 |坛友微信交流群
终于明白怎么回事了,原来这个变量存储时用的单精度,而判断是否等于某个数时,这个具体数值用的是双精度,所以不相等,先把数据类型转换成双精度,再输入就对了。
但又有一个问题了:如果先输入数据,默认存储类型为单精度,若转换成双精度类型,则原先存储的精度并未改变,只有这之后改变过的值才是真正的双精度,怎样让改变存储类型的同时也真正改变原有数据的精度?

使用道具

9
baiygggg 发表于 2010-11-26 16:33:27 |只看作者 |坛友微信交流群
我用的recast改变存储类型

使用道具

10
Eddiereuters 发表于 2010-11-26 16:51:46 |只看作者 |坛友微信交流群
..........d

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-6-7 20:58