注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

widebright的个人空间

// 编程和生活

 
 
 

日志

 
 

int和float溢出的问题(转)  

2014-05-23 13:42:33|  分类: 程序设计 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
PERFECT PREVENTION OF INT OVERFLOWS
http://forrestthewoods.ghost.io/perfect-prevention-of-int-overflows/


float的精度问题,导致它在表达比较大的数值时,误差比较大,比如1,000,000,000 这个数值时,精度误差就达到64了。
int和float溢出的问题(转) - widebright - widebright的个人空间
 

文章是说int 用来表示时间的秒,毫秒时和float转换的时候可能会溢出的问题。
很多int本来没有溢出的,转换成float,再转回来精度原因就会导致不是以前那个值了,会导致溢出。

文章里面举的例子,溢出导致的问题,比较不不对。
int x = (int)(float)2147483647; // OVERFLOW!
(int_max - 190) < (int)(float)(int_max - 190)  
(int_max - 127) == (int)(float)(int_max - 127)
(int_max - 64) > (int)(float)(int_max - 64)
提到的几个预测溢出的办法。
bool float_to_int_safe(float f) {  
    const float max_safe = 2147483520.f;  // 2^31 - 128
    const float low_safe = -2147483648.f;  // -2^31
    return std::isfinite(f) && f <= max_safe && f >= low_safe;
}
bool int_add_safe(int a, int b) {  
    if (a >= 0 && b >= 0)
        return INT_MAX - a >= b;
    if (a < 0 && b < 0)
        return INT_MIN - a <= b;
    return true;
}

float还是没有double精度高吧。

比较好的文章,找原文看一下


  评论这张
 
阅读(569)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017