2013年12月11日 星期三 19:18
> 在 2013年12月11日,下午7:05,Li Jie <eltshanli在gmail.com> 写道: > > 2013/12/11 Kermit.Mei <kermit.mei在gmail.com>: >> Hello all, >> >> 我遇到一个奇怪的问题,有些数字,比如我已经发现的这个: >> 92542.2817 >> >> 如果我把它作为浮点数存储到C++变量中,如: >> double number = 92542.2817; >> >> 则不管是使用stringstream把它转换为字符串,还是在调试器里面 >> 看这个变量赋值后的值,都是: >> >> 92542.28170000001 >> >> 这个是多了 1e-9个单位,还有一些奇怪的数字会少这么个单位。 >> >> 因为我的浮点保留位是用户自定义的,所以我现在不知道怎么应对这个 >> 问题了? >> >> >> 求指教? 多谢! > > 很多年前我也遇到过这个问题, > 当时google过, 大意是根据IEEE7XX的规范, 用二进制表示浮点数时, > 并不能表达所有浮点数, 在很多情况下, 它只能表达指定浮点数的一个近似值. 悲剧! 不知你后来怎么解决的? 我现在的问题是找不到它误差的规律啊,要是找到规律就有办法解决了。 具体点儿说,就是我没有办法在把双精度浮点转换成string后,知道它是不是 产生了误差。。。求支招啊! B.R Kermit > > -- > Regards > Li Jie > > -- > 您收到此邮件是因为您订阅了 Google 网上论坛的“Shenzhen (深圳) Linux Unix User Group”论坛。 > 要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 szlug+unsubscribe在googlegroups.com。 > 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
2013年12月11日 星期三 22:32
在 2013年12月11日下午7:18,Kermit.Mei <kermit.mei在gmail.com>写道: > 悲剧! > 不知你后来怎么解决的? > 我现在的问题是找不到它误差的规律啊,要是找到规律就有办法解决了。 > > 具体点儿说,就是我没有办法在把双精度浮点转换成string后,知道它是不是 > 产生了误差。。。求支招啊! > 从 bit 看,它还是可以精确的,结果就是,存时直接失败,告诉你某些数字不能存储 :) 小数的精确,是金融业最普通的需求吧,应该有现成方案(库)的。 C++ 不清楚, Python 中有 decimal 模块是专门解决此类问题的。见: http://docs.python.org/2/library/decimal.html 以 decimal 为关键词应该能找到你需要的信息,比如: http://stackoverflow.com/questions/15319967/exact-decimal-datatype-for-c -- 进出自由才是游戏者的生存之道。 http://zouyesheng.com -------------- 下一部分 -------------- 一个HTML附件被移除... URL: <http://www.zeuux.org/pipermail/zeuux-universe/attachments/20131211/900e56e2/attachment.html>
Zeuux © 2024
京ICP备05028076号