哲思官方群认证群组  - 讨论区

标题:[zeuux-universe] [szlug] 浮点数 92542.2817在C++中无法使用?

2013年12月11日 星期三 19:18

Kermit.Mei kermit.mei在gmail.com
星期三 十二月 11 19:18:46 CST 2013

> 在 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。

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-universe]

2013年12月11日 星期三 22:32

Yesheng Zou yeshengzou在gmail.com
星期三 十二月 11 22:32:57 CST 2013

在 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>

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-universe]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号