float、double类型的转化和判断为零问题

这篇具有很好参考价值的文章主要介绍了float、double类型的转化和判断为零问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、将字符串转化为float、double

浮点数在内存中的存储机制和整形数据不同,有舍入误差,在计算机中用近似表示任意某个实数。具体来说,这个数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到。这种表示方法类似于基数为10的科学计数法。所以浮点数在运算过程中随着因为无法精确表示而进行近似或舍入。但是这种设计的好处是可以在固定的长度上存储更大范围的数。

转化过程存在精度损失,只是float、double各自损失的精度不相同而已

std::string str="8.2";

float cc=atof(str.c_str());  //cc的值为8.1999998

std::string str="8.2";

double cc=atof(str.c_str());  //cc的值为8.1999999999999993 

2.float、double判断是否等于0

float是32位,double是64位。float32位中,有1位符号位,8位指数位,23位尾数位。double64位中,1位符号位,11位指数位,52位尾数位。

一般float型只能精确到小数到后六位即1e-6,将float型的数a的绝对值abs(a)与1e-6比较,如果abs(a)比1e-6还要小的话就可以认为a的值为零,因为小数六位以后是不精确的,是没有意义的。

比如数0.0000001虽然确实不等于零,但是第七位小数1是没有意义的就可以认为这个数等于0。

float,double分别遵循R32-24,R64-53的标准。所以float的精度误差在1e-6;double精度误差在1e-15,所以要判断一个单精度浮点数:则是if( abs(f) <= 1e-6);要判断一个双精度浮点数:则是if( abs(f) <= 1e-15 );若小于,为0,大于,不为0 。文章来源地址https://www.toymoban.com/news/detail-722753.html

    float a = 0;
    if(fabs(a) < 1e-6) 
    {
        printf("%f\n",fabs(a));
        printf("float Equal 0!\n");
    }
    else
    {
        printf("%f\n",fabs(a));
        printf("float not Equal 0!\n");
    }
    
    double b = 0; 
    if(fabs(b) < 1e-15)
    {
        printf("%f\n",fabs(a));
        printf("double Equal 0!\n");
    }
    else
    {
        printf("%f\n",fabs(a));
        printf("double not Equal 0!\n");
    }

到了这里,关于float、double类型的转化和判断为零问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言中,float跟double的区别及用法

    顾得泉: 个人主页 个人专栏: 《Linux操作系统》  《C/C++》  《LeedCode刷题》 键盘敲烂,年薪百万! float和double都是用来表示浮点数的数据类型,但是它们之间有一些区别:        存储大小:float占4个字节(32位),double占8个字节(64位)。        精度:double比float精度

    2024年02月06日
    浏览(34)
  • c语言中啥时候用double啥时候用float?

    一般来说,可以使用double来表示具有更高精度要求的 浮点数 ,因为它可以存储更大范围的数值并且具有更高的精度。 最近很多小伙伴找我,说想要一些c语言资料,然后我根据自己从业十年经验,熬夜搞了几个通宵,精心整理了一份「c语言专业入门到高级教程+工具包」,点

    2024年02月08日
    浏览(36)
  • 【开发问题】flink-cdc不用数据库之间的,不同类型的转化

    我一开始是flink-cdc,oracle2Mysql,sql 我一开始直接用的oracle【date】类型,mysql【date】类型,sql的校验通过了,但是真正操作数据的时候报错,告诉我oracle的数据格式的日期数据,不可以直接插入到mysql格式的日期数据,说白了就是数据格式不一致导致的 我想的是既然格式不对

    2024年02月12日
    浏览(35)
  • 涉及float和double

    它们会分成小数部分和指数部分分别存储。小数部分的有效位数越多,精度就越高,指数部分占位越多,能表示的数值范围越大。 一般float是4个字节,double是8个字节。 一般float的精度比double的大一些。 double的数值表示范围远远大于float。 该结论来源于谭浩强《C语言设计》的

    2024年02月07日
    浏览(21)
  • 【C++】float / double 与 0 值比较

    当然使用普通的比较没有问题,如果不考虑精度的话,可以使用 但是,在某些情况下可能出错。 1.1 - float 与 double 实际存储 float 与 double 在计算机中存储的内容可能与想象中等于代码赋予的字面值不同,如下 因此与 0 值的比较不可以单纯比较 == 0.0 1.2 - C 语言与 C++ 中不同 然

    2024年02月13日
    浏览(24)
  • C语言字符串转换double等类型(sscanf,atof,strod)

    例子: 注意: 忽略空格   例子: 注意: sscanf解析字符串时,空格通常被用作分隔符,可以用它来分隔字符串中的不同部分。 例如,以下代码将把字符串\\\"123 456\\\"中的两个整数读入a和b中,空格用作分隔符: 在这个例子中,sscanf会忽略字符串中的多余空格,并将\\\"123\\\"解析为a的

    2024年02月14日
    浏览(34)
  • Gson int类型被转换成double问题解决(完美解决)

    1.1、BaseResponse类 1.2、不做任何处理,直接用Gson.fromJson解析 1.3、解析结果 1.4、问题 Int类型的\\\"ints\\\"被转换成了double类型、Long类型的\\\"longs\\\"也被转换了 二、解决方案 2.1、旧的(网上千篇一律的复制方案, 其实没有任何卵用 ) 网上千篇一律就是新建TypeAdapter接口的子类,手动转换。

    2024年02月11日
    浏览(41)
  • 日常踩坑:Java中double类型出现科学计数法问题

    背景:在与银行的项目对接中,近期客户反馈支付失败,错误信息是:“付款金额格式有问题”,经过日志分析,发现客户系统发送银行系统时,付款金额以科学计数法的形式传递参数。 重现: 经过测试发现,浮点数(double、float)当整数部分超过7位以上(不含7位),就会

    2024年02月16日
    浏览(35)
  • 报错:RuntimeError: expected scalar type Double but found Float

    这个问题是深度学习,用pytorch跑的时候出现的 解决办法:这个是格式问题,希望的格式是double,但得到的是float。字面意思是这个,但是并不是非要把格式改成double,这个时候应该在出错的前面几处代码设个断点debug一下,我得到的结果是image、img_rgb都是tensor.unit8格式的,但

    2024年02月13日
    浏览(37)
  • loss.backward()处遇到“RuntimeError: Found dtype Double but expected Float”

    类型错误, 计算loss值的函数传入的参数类型不统一。 查看上文loss计算代码部分的参数类型,如loss=f.mse_loss(out,label),检查out和label的类型都是torch.float类型即可。使用label.dtype查看tensor的类型。 报错定位在这一行 寻思着是否是loss类型的问题,于是我就添加 但是还是报错在此

    2024年02月16日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包