注意:C++中double的表示是有误差的

注意:C++中double的表示是有误差的,直接通过下面的例子看一下

 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     double i;
 6     for(i=0;i!=10;i+=0.2)
 7     {
 8         cout<<i<<endl;
 9     }
10     return 0;
11 }

本来是希望i=10的时候退出的,却成了死循环,看一下结果

看上去运行结果中好像有10,但是并没有退出循环,究其原因,C/C++语言中机器码表示的双精度实型变量是有误差的,在i从0加到10的过程中,并不是一直以0.2为递增,可能是0.2000000001或0.20000000000001等等,具体跟机器类型有关。所以运行出来的10其实不一定是真实的10,因此,在for循环体中最好用小于、大于、小于等于或大于等于,而不要用等于或不等于。

时间: 2024-11-29 11:55:01

注意:C++中double的表示是有误差的的相关文章

java中double变量保留小数问题

(转载自玄影池扁舟) 做java项目的时候可能经常会遇到double类型变量保留小数的问题,下面便把我的经验做个简短的总结: java中double类型变量保留小数问题大体分两种情况: (一):小数点后面位数过长,四舍五入保留指定位数: 可以用以下代码实现: public class TestDemo { public static void main(String[] args) {     double a=15.32743859;     double b=Math.round(a*100

java中double四舍五入并设置小数点位数的问题

本文系转载,原文地址:http://blog.csdn.net/star_huang/article/details/7639267 今天遇到个需要将一个double类型的数据保留小数点后两位的问题.在网上搜寻的集中解决方案,copy来一下,备用 首先result_value是处理前的double get_double是用来保存我处理后的double   //方案一: get_double = (double)(Math.round(result_value*100)/100.0) //方案二:

Java中double类型的数据精确到小数点后两位

Java中double类型的数据精确到小数点后两位 多余位四舍五入,四种方法 一: double f = 111231.5585;BigDecimal b = new BigDecimal(f); double f1 = b.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue(); 二: new java.text.DecimalFormat("#.00").format(3.1415926) 三: double d = 3.1415926

java 中double型转化成int型(转)

java 中double型转化成int型 一个变量 double x: //不进行四舍五入操作: (int)x //进行四舍五入操作: Integer.parseInt(new java.text.DecimalFormat("0").format(x))

swift中Double转String

swift上手有好几天了.发现swift除了本身的几个基本类型转换,一些比较特殊的数值类型转换需要“桥接”到Objective-C来进行- 代码当然也很简单- var numString = "1.0" var numDouble:Double numDouble = String.bridgeToObjectiveC(numString)().doubleValue //相当于objective-c的" numdouble = [numString doubleValue]

Average-计算文件中double类型数字的平均数

Average-计算文件中double类型数字的平均数: //Average-计算文件中double类型数字的平均数 #include<iostream> #include<fstream> #include<cstdlib> int main() { using namespace std; ifstream fin; ofstream fout; double tem,sum,aver; int count = 0; fin.open("numbers.d

c++中double转换成string型(浮点数的格式化)

在日常编程中--包括对话框.关系数据库.金融程序.SMS程序及一切处理数据文件的程序,需要控制小数点后的小数位的情况非常普遍,本文中将要讲 解如何用简单的方法来控制小数位,另外,还要揭开字符串及数据精度的一点点小秘密. 问题的引出 如有一个函数,其可接受一个long double参数,并将参数转换为字符串,结果字符串应保留两位小数,例如,浮点值123.45678应该生成“123.45”这样的字符串.表面上看来 这是一个意义不大的编程问题,然而,如果真要在实际中派上用场,函数应设计为具有一定弹性,

机器学习中的Bias(偏差),Error(误差),和Variance(方差)有什么区别和联系?

原文:http://www.zhihu.com/question/27068705 机器学习中的Bias(偏差),Error(误差),和Variance(方差)有什么区别和联系?修改 最近在学习机器学习,在学到交叉验证的时候,有一块内容特别的让我困惑,Error可以理解为在测试数据上跑出来的不准确率 ,即为 (1-准确率). 在训练数据上面,我们可以进行交叉验证(Cross-Validation).一种方法叫做K-fold Cross Validation (K折交叉验证), K折交叉验证,初始

C++中double值的处理

近日看见了一张来自网上的图 父亲看见这图就觉得十分有意思,就给许多村里的大学生们看让他们算,如图这是一道并不难的三元一次方程组问题,我心里一盘算觉得正常算并不能体现我IT精英的与众不同,于是我就说看我变个程序来解题.结果当然遵循装B遭雷劈的至高真理. 这道题目的答案是3.5,4.5,9.5和3.5. 为了尽快解决问题我就是用了最简单的逻辑方法让计算机用大量的运算去堆答案代码如下 1 #include<iostream> 2 using namespace std; 3 void main()