关闭

浮点数精度问题处理

标签: 数据
840人阅读 评论(0) 收藏 举报
分类:

参考

由于浮点数在计算机中的存储问题,所以不论是float类型的数据还是double类型的数据都是有其精度的,取浮点数精度下限,float为6位,double为14位,因此在判断浮点数是否相等时,可引入一个远超过浮点数精度的极小量eps(epsilon)作为判断标准用以判定两浮点数是否相等。
eps缩写自epsilon,表示一个小量,但这个小量又要确保远大于浮点运算结果的不确定量。eps最常见的取值是1e-8左右。
判别浮点数a,b是否相等的写法:fabs(a-b) < eps

此外,对于某些问题的数据我们可以进行一下预处理,使其变为整型数,整型数不存在精度的问题,所以可以直接判断,如:

/*

这个你肯定知道,人民币有以下金额的纸币和硬币:100, 50, 20, 10, 5, 1, 0,5, 0.1, 0.05, 0.02, 0.01。
输入一个金额(保证合法),输出一个整数,是输入金额最少所需的钱币数目(含纸币和硬币)
样例输入
82039.52
样例输出
829

注释(这个不是输出的内容):829是820张100元,1张20元,1张10元,1张5元,4张1元,1张5角,1张2分计算出来的。
*/

/*
由题意知,输入的数都是保留到小数点后两位。
*/

#include <iostream>
#include <cstdio>
#define EPS 1e-6
using namespace std;

const int money[12] = {10000,5000,2000,1000, 500, 100, 50, 10, 5, 2, 1};

int main(){
    //for(int i=0;i<11;i++) cout << money[i] << " ";
    double m;
    while(scanf("%lf",&m)!=EOF){
        int n = (m +EPS) * 100;//浮点数精度处理
        int cnt = 0, t;
        for(int i=0;i<11;i++){
            t = n / money[i];
            cnt += t;
            n -= t*money[i];
        }
        cout << cnt << endl;
    }
    return 0;
}
0
0
查看评论

JavaScript 浮点数运算的精度问题

问题描述 在 JavaScript 中整数和浮点数都属于 Number 数据类型,所有数字都是以 64 位浮点数形式储存,即便整数也是如此。 所以我们在打印 1.00 这样的浮点数的结果是 1 而非 1.00 ...
  • helloxiaoliang
  • helloxiaoliang
  • 2017-05-25 10:57
  • 1201

php浮点数的精度问题深究

前段时间同事在算个值的时候发现,算出来的值不对,于是来问我,之前的开发中也遇到过这个问题,已经记不清楚怎么处理的了,貌似用round四舍五入来着 今天就这个问题深入看一下 鸟哥的文章 PHP浮点数的一个常见问题的解答 已经解答了,这个问题产生的原因 那这么解决这个问题 我在php的官方找到了解决方...
  • a454213722
  • a454213722
  • 2016-08-06 12:00
  • 1531

问题解决 Java浮点数的精度及解决方法

先以一个题目来开头:
  • u010419438
  • u010419438
  • 2014-09-08 00:33
  • 470

JS的浮点数计算精度丢失问题解决方案

近期在做项目的时候,遇到了一些JS浮点数精度的问题。这个问题,其实说大不大,说小不小。但是这次因为涉及到一些财务和结算的问题,然后突然发现这个小问题处理起来还是挺麻烦的。这里把相关的原因的问题的解决方案整理一下,也希望给各位提供一些参考。
  • u012143360
  • u012143360
  • 2016-11-13 13:31
  • 2601

Matlab常见问题之 浮点数精度问题

Matlab 常见问题之浮点数的精度问题
  • horsee
  • horsee
  • 2016-11-25 16:10
  • 2605

浮点数精度问题与使用注意点

“要想为某些正确选择数的精度具有重要意义的问题选择一种正确的精度,就需要有对浮点计算的深入理解。如果你并没有这种理解,那么给你一个忠告是花时间去学习,或者就选择double并期待着能得到最好的结果”
  • m0_37975345
  • m0_37975345
  • 2017-03-27 17:36
  • 225

js浮点数精度问题(js计算中遇到的坑)

转自:http://talentluke.iteye.com/blog/1767138 大多数语言在处理浮点数的时候都会遇到精度问题,但是在JS里似乎特别严重,来看一个例子 alert(45.6*13); 结果居然是592.800000000001,当然加法之类的也会有这个问题 ...
  • DADADIE
  • DADADIE
  • 2015-12-23 10:44
  • 9478

Java浮点数float和double精确计算的精度误差问题总结

1、float整数计算误差 案例:会员积分字段采用float类型,导致计算会员积分时,7位整数的数据计算结果出现误差。 原因:超出float精度范围,无法精确计算。 float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,...
  • aya19880214
  • aya19880214
  • 2015-05-21 14:34
  • 26511

ACM中浮点数精度问题

在ACM中,精度问题非常常见。其中计算几何头疼的地方一般在于代码量大和精度问题,代码量问题只要平时注意积累模板一般就不成问题了。精度问题则不好说,有时候一个精度问题就可能成为一道题的瓶颈,让你debug半天都找不到错误出在哪。 (原文出处:http://www.cnblogs.com/craz...
  • SSimpLe_Y
  • SSimpLe_Y
  • 2016-11-21 21:35
  • 610

js小数运算精度问题,js浮点数运算时出现精度问题

js中进行浮点数运算时容易出现精度问题,以下方法可以解决  1) 除法函数,用来得到精确的除法结果  //说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。  //调用:accDiv(arg1,ar...
  • kongjiea
  • kongjiea
  • 2016-03-23 14:40
  • 2430
    个人资料
    • 访问:49578次
    • 积分:1226
    • 等级:
    • 排名:千里之外
    • 原创:67篇
    • 转载:3篇
    • 译文:2篇
    • 评论:8条
    文章分类
    最新评论