`
orcl_zhang
  • 浏览: 243126 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

关于浮点数精度的问题

    博客分类:
  • ruby
阅读更多
   在项目里遇到一个很诡异的问题,因为有一些浮点数的计算,总是失败,所有将出问题的变量打印到日志里。
   结果如下:
引用
   ====reicpe_blocked  1.9
   ====real_block 1.9

   是这样的,recipe_blocked变量值是:1.9,real_block变量值是1.9,两个结果相减结果是result,但是在程序对result有个判断,判断result是否大于0小于0还是等于,本来正确的结果是等于,但是最后却到了小于这里。
    google搜索了下,找到了两个关于ruby浮点数的帖子。
    http://www.iteye.com/problems/37144
    http://pickerel.iteye.com/blog/796405
    在本地试了下
  
引用
>> e = 0.477+(0.432-0.477)*(5-4.7)/(5.7-4.7)
=> 0.4635
>> e.round(3)
=> 0.463
>> a=0.4635
=> 0.4635
>> a.round(3)
=> 0.464



引用
>> 10.12*100
=> 1012.0
>> (10.12*100).to_i
=> 1011
>> (10.12*100).to_f.to_i
=> 1011
>> (10.12*100).to_f.round(2).to_i
=> 1012
>> (10.12*100).to_s.to_i
=> 1012



引用
>> e = (0.477).round(3)+((0.432-0.477)*(5-4.7)/(5.7-4.7)).round(3)
=> 0.464
>> e = (0.477).round(4)+((0.432-0.477)*(5-4.7)/(5.7-4.7)).round(4)
=> 0.4635
>> e.round(3)
=> 0.463
>> e.inspect
=> "0.4635"
>> e.to_f.round(3)
=> 0.463
>> e.to_s.to_f.round(3)
=> 0.464


引用
>> e=0.477+(0.432-0.477)*(5-4.7)/(5.7-4.7)
=> 0.4635
>> e-0.4635
=> -5.55111512312578e-17
>> e.to_s.to_f-0.4635
=> 0.0

看来加上to_s.to_f还是有效果的。还是精度的问题。


分享到:
评论

相关推荐

    关于浮点数的精度问题

    浮点数精度问题是一个经典的问题,对于了解和学习C语言有一定帮助。浮点数的精度问题是由于计算机对浮点数的存储方式和表示方法所致。 IEEE754 的浮点数存储格式对浮点数的表示方法进行了规定。浮点数可以分为三...

    浮点数精度问题解答——浮点数

    浮点数精度问题在计算机科学中是一个至关重要的概念,尤其对于进行数值计算的开发者来说,理解和掌握浮点数的表示和精度误差至关重要。本文将详细阐述IEEE 754标准,这一标准对浮点数的表示和计算进行了规范,旨在...

    C语言中浮点数精度问题分析.pdf

    在C语言编程中,浮点数精度问题是一个常见的问题,它涉及到计算机科学基础中的数值表示方法。由于计算机采用二进制系统存储数据,这使得计算机在处理十进制小数时会出现精度误差。理解这些误差产生的原因是极为重要...

    浮点数精度问题

    通过阅读和理解这些方法,我们可以学习到更多关于如何在实际编程中应对浮点数精度问题的技巧。 总之,理解和处理浮点数精度问题对于任何涉及数值计算的程序员来说都是至关重要的。通过选择合适的数据类型、使用高...

    浮点数(单精度浮点数,双精度浮点数)

    浮点数(单精度浮点数,双精度浮点数) 浮点数是一种数字表示方法,用于近似表示任意实数。在计算机中,浮点数由一个整数或定点数(即尾数)乘以某个基数(通常是 2)的整数次幂得到。这种表示方法类似于基数为 10 ...

    C语言中的浮点数精度问题如何处理?

    在C语言中,浮点数的精度问题是一个常见的挑战,因为它涉及到如何在有限的位数内表示无限的实数。浮点数的存储基于IEEE 754标准,这导致了一些数字无法被精确表示,从而引发了...以下是处理浮点数精度问题的几种方法:

    c语言浮点数高精度加法计算

    c语言浮点数高精度加法计算

    用于更方便的解决PHP中超大数字和浮点数精度问题

    为了避免浮点数精度问题,`bignumber`库通常采用字符串或其他特定的数据结构来存储大数字,这样就不会受到二进制表示的限制。通过这种方法,开发者可以在PHP中进行任意精度的数学运算,这对于金融计算、加密算法、...

    对S7-200PLC双精度浮点数转单精度浮点数例程的一点补充

    本篇文章主要探讨了如何在S7-200 PLC中处理双精度浮点数转换为单精度浮点数的问题,这对于管理智能电表、远传水表等远程抄表系统的数据一致性至关重要。双精度浮点数提供了更高的精度,但在处理能力有限的S7-200 PLC...

    S7-200SMART_双精度浮点数转换为单精度浮点数库文件及使用说明.rar

    本文将详细介绍如何使用S7-200SMART进行双精度浮点数到单精度浮点数的转换,并提供相应的库文件及使用说明。 1. **浮点数类型**: 浮点数在计算机中分为单精度浮点数(32位,IEEE 754标准)和双精度浮点数(64位,...

    浮点数精度.vi

    浮点数精度

    双精度浮点数转换

    在计算机科学中,浮点数是一种用于...无论是单精度还是双精度浮点数,了解它们如何在不同表示形式之间转换,以及如何进行实际转换,都能增强我们对计算机内部运作的理解,从而更好地利用这些数据类型来解决实际问题。

    S7-200双精度浮点数转单精度浮点数例程

    本代码将双精度浮点数转换为单精度浮点数,适合浮点数为正值的转换。 使用后将占用VD2810~VD2970字节,欢迎交流。 本代码的完成经历了一段时间的刻苦研究,无偿提供给真正需要的人,希望同行少走弯路。 代码允许复制...

    解决javascript中的浮点数计算不精确问题

    3. **使用库**:有一些库,如提供的`DoubleCount.js`,可以帮助处理浮点数精度问题。`DoubleCount.js`可能提供了更精确的浮点数计算方法,或者提供了方便的比较和格式化工具。 ```javascript // 引入DoubleCount....

    浮点数转换器,可将浮点数、单精度 双精度的数值转换为16进制发送

    浮点数转换器,可将浮点数、单精度 双精度的数值转换为16进制发送

    单精度双精度浮点数转换

    单精度双精度浮点数转换,浮点数与16进制转换工具

    单精度&双精度浮点数与十六进制数相互转换

    本文将深入探讨单精度和双精度浮点数与十六进制数之间的转换。 首先,我们来了解浮点数的基本概念。浮点数是一种可以表示小数的数值类型,分为单精度(Single-precision)和双精度(Double-precision)。单精度...

    PHP浮点数精度问题汇总

    但鉴于本文件内容是关于PHP,以下将针对PHP中的浮点数精度问题进行详细说明。 首先,我们需要明确的是,在计算机中,浮点数的表示遵循IEEE 754标准,而PHP使用的是双精度64位浮点数表示法。按照这一标准,一个双...

Global site tag (gtag.js) - Google Analytics