oj刷题系列-----C++的精度问题

#首先int是4位的,sizeof(long)的值是4,sizeof(unsigned long long)的值是8。而其实很多情况下都不够用,所以经常需要定义为double甚至以上的类型。而对于double类型的运算来说,经常会因为精度原因造成结果失误,为此调试浪费大量时间。比如:
计算c=211111/(int)pow(10,1);的时候,c为得到21111.1,而是21111.0999999,于是下面d=10*(c-int©);就相应得到了0.9999998,所以输出(int)d就成了0;
这种类似于double类型转化为int整型的操作,都会因为精度原因而失真,这里给出本人的一种解法:
if(z - (int)z == 1){
i = (int)z + 1;
}else{
i = (int)z;
} //因为int操作会强制丢弃小数点后面的数字,向下取整。

2,对于double类型的取余操作,无法使用%,可以使用fmod等函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值