C语言中for中浮点数精度的一个疑问
来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/07/20 23:19:25
C语言中for中浮点数精度的一个疑问
double x = 1.0;
for( ; x < 11 ; x += 1.0) 》这个循环是可以结束.
double x =0.0;
for( ; x = 2.0; x += 0.2) 》这个循环是无限的.
书里的解释是:“0.2没有浮点数形式的二进制精确表示”.
1)double浮点数可以精确到小数后很多位.
2)“0.2没有浮点数形式”和“二进制精确”这两句话都无法看明白.
我猜,是不是就是因为double后面有太多位0,和0.2”不匹配“,所以x!=2.0这个条件无效,造成了没有结束条件,所以成了无限循环?
double x = 1.0;
for( ; x < 11 ; x += 1.0) 》这个循环是可以结束.
double x =0.0;
for( ; x = 2.0; x += 0.2) 》这个循环是无限的.
书里的解释是:“0.2没有浮点数形式的二进制精确表示”.
1)double浮点数可以精确到小数后很多位.
2)“0.2没有浮点数形式”和“二进制精确”这两句话都无法看明白.
我猜,是不是就是因为double后面有太多位0,和0.2”不匹配“,所以x!=2.0这个条件无效,造成了没有结束条件,所以成了无限循环?
![C语言中for中浮点数精度的一个疑问](/uploads/image/z/5187193-25-3.jpg?t=C%E8%AF%AD%E8%A8%80%E4%B8%ADfor%E4%B8%AD%E6%B5%AE%E7%82%B9%E6%95%B0%E7%B2%BE%E5%BA%A6%E7%9A%84%E4%B8%80%E4%B8%AA%E7%96%91%E9%97%AE)
计算机存储浮点数时,是按IEEE754标准来存储的.简单说是以二进制科学计数法来存储的.
一个double型数据,在存储时,占8个字节,其存储格式为:符号位一位,指数位11位,尾数(小数)位52位,共计64位.
一个小数转换成二进制小数时,采用的是乘2取整法,如:0.2 =
0.2*2=0.4
0.4*2=0.8
0.8*2=1.6
0.6*2=1.2
0.2*2=0.4 到此开始循环,所以0.2=0.001100110011..
这是一个循环数,double的存储形式,导致不可能把这个循环小数全表示出来,因此不可能精确表示出0.2这个数!
一个double型数据,在存储时,占8个字节,其存储格式为:符号位一位,指数位11位,尾数(小数)位52位,共计64位.
一个小数转换成二进制小数时,采用的是乘2取整法,如:0.2 =
0.2*2=0.4
0.4*2=0.8
0.8*2=1.6
0.6*2=1.2
0.2*2=0.4 到此开始循环,所以0.2=0.001100110011..
这是一个循环数,double的存储形式,导致不可能把这个循环小数全表示出来,因此不可能精确表示出0.2这个数!
C语言中for中浮点数精度的一个疑问
C语言中单精度浮点数和双精度分别如何表示?有什么差别?
在C语言中单精度浮点和双精度浮点小数点后有几位小数
有关C语言中的单精度浮点数的问题:
C语言中,对浮点数求绝对值的库函数是什么?就是怎么对一个浮点数求绝对值
“浮点数”在C语言中是什么意思?
C语言中什么是正确的浮点数
C语言中 小数和浮点数的区别
定义一个类,该类中能实现分别求两个整数、双精度浮点数、单精度浮点数中的较小数的功能 .
在C语言中怎样表示一个既有整数又有浮点数的数组
C语言中,编写一个求浮点数绝对值的函数,在主函数中输入一个浮点数,输出绝对值(谢谢)
c语言中浮点数四舍五入 .保留一个浮点数小数点后的6位,第3位要四舍五入.如 1.1234.567到1234.57000