码迷,mamicode.com
首页 > 编程语言 > 详细

记C语言浮点数运算处理 "坑" 一则

时间:2014-05-02 09:23:52      阅读:288      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   java   javascript   

看一小段C语言程序:

bubuko.com,布布扣
int main()
{
    float x = 1.3;
    x = x - (int)x;
    int i = (int)(x*10);
    return 0;
}
bubuko.com,布布扣

在你心目中, 变量 I 是怎样的结果?

如果你理所当然地认为是3的话, 那么你就错了~~~

实际结果应该是2.   为什么?

简而言之, x在内存的值并不是精确的1.3, 实际上可能是1.29999999......

因为在计算机组成原因中有说过, 浮点数无法被准确地表示出来, 只能是一个非常精确的值..

 

就算现在你已经知道这个"坑"了, 但还是不小心会犯, 所以务必要牢记~~~

 

处理办法:

1. 使用精度更高的double.

2. 取整之前四舍五入(加上一个非常小的0.00000.......005, 但要注意浮点数的精度范围), 就像下面这样.

bubuko.com,布布扣
int main()
{
    float x = 1.3;
    x = x - (int)x;
    int i = (int)(x*10+0.00005);
    return 0;
}
bubuko.com,布布扣

同时也要值得注意的是, 这个四舍五入的操作只能用于取整的时候, 你不能加在原浮点值上面改变了原来的浮点数值.

 

女孩不哭 @ cnblogs.com/memset @ 2014-05-02

记C语言浮点数运算处理 "坑" 一则,布布扣,bubuko.com

记C语言浮点数运算处理 "坑" 一则

标签:style   blog   class   code   java   javascript   

原文地址:http://www.cnblogs.com/memset/p/c_float_precision_problem.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!