蓝桥杯辅导视频学习-浮点数的注意事项
2016-07-06 13:46
267 查看
浮点数不能精确比较
蓝桥杯例题1:
浮点数:对它的说法是足够接近 |a - b| < seta,而不是完全相等(不能用 == 来判断,这是大忌)。因为计算式内部是采用二进制的方式来表示。
上题可以用暴力破解法,
但关于浮点运算,用以上的暴力破解法存在隐患,可用以下方法进行改善 (避开浮点数)。
避开浮点数:价钱都是以元为单位,存在小数,那么全都乘10倍,改成以角为单位。
蓝桥杯例题2:
【注意】
写成16行那样是错误的:因为1/XXX得到的答案都0
写成17行那样可行,可是对于浮点运算用了 == 进行比较,虽然能得出正确结论,但存在隐患
解决存在的隐患:
1). 写成17行那样,但进行比较时不用==,而是用 abs (1.0/a + 1.0/b + 1.0/c + 1.0/d - 1.0) < 1E-10(或其他小数)进行比较。
2).写成18行那样,用通分的方法,解决存在分母的问题,等式两边同乘上 abcd(要注意是否超过整型范围)。
浮点数:一般我们表示的都是有理数。 有理数的表示:分子/分母。
浮点数运算时目前采用的规则是IEEE754,该规则规定浮点数有几个特殊的值:(double类型)
Infinity 无穷大 ,如double a = 3.0 / 0 可得到的值
减号 Infinity 负无穷大
0.0 ,如 1/a 可取得
减号 0.0,如1/(-a) NAN:Not a Number ,无意义,如a/a,a-a 都可得到
如例题:要求有效数字100位,即任意精度的小数。
浮点数的四舍五入模式:四舍六入五成双。
比如有浮点数3.150,舍去则是3.1,加入则是3.2,所以最后的结果是3.2,成双。
蓝桥杯例题1:
浮点数:对它的说法是足够接近 |a - b| < seta,而不是完全相等(不能用 == 来判断,这是大忌)。因为计算式内部是采用二进制的方式来表示。
上题可以用暴力破解法,
for (int a = 0; a < 100 ; a++) //a 是啤酒数量,b是饮料的数量,假设它们的取值范围都在0 ~ 100 { for (int b = 0; b < 100; b++) { if (a * 2.3 + b * 1.9 == 82.3) printf("%d , %d \n",a,b); } }
但关于浮点运算,用以上的暴力破解法存在隐患,可用以下方法进行改善 (避开浮点数)。
避开浮点数:价钱都是以元为单位,存在小数,那么全都乘10倍,改成以角为单位。
for (int a = 0; a < 100 ; a++) { for (int b = 0; b < 100; b++) { if (a * 23 + b * 19 == 823) printf("%d , %d \n",a,b); } }//虽然与前一种方法没什么差别,但避开浮点数,可以有效的避开题目中或许隐含着的陷阱。
蓝桥杯例题2:
【注意】
写成16行那样是错误的:因为1/XXX得到的答案都0
写成17行那样可行,可是对于浮点运算用了 == 进行比较,虽然能得出正确结论,但存在隐患
解决存在的隐患:
1). 写成17行那样,但进行比较时不用==,而是用 abs (1.0/a + 1.0/b + 1.0/c + 1.0/d - 1.0) < 1E-10(或其他小数)进行比较。
2).写成18行那样,用通分的方法,解决存在分母的问题,等式两边同乘上 abcd(要注意是否超过整型范围)。
浮点数:一般我们表示的都是有理数。 有理数的表示:分子/分母。
浮点数运算时目前采用的规则是IEEE754,该规则规定浮点数有几个特殊的值:(double类型)
Infinity 无穷大 ,如double a = 3.0 / 0 可得到的值
减号 Infinity 负无穷大
0.0 ,如 1/a 可取得
减号 0.0,如1/(-a) NAN:Not a Number ,无意义,如a/a,a-a 都可得到
如例题:要求有效数字100位,即任意精度的小数。
浮点数的四舍五入模式:四舍六入五成双。
比如有浮点数3.150,舍去则是3.1,加入则是3.2,所以最后的结果是3.2,成双。
相关文章推荐
- 关于PHP浮点数你应该知道的(All 'bogus' about the float in PHP)
- Linux C函数参考手册(PDF版)
- C# partial关键字说明
- Lua教程(十七):C API简介
- 简单谈谈lua和c的交互
- C#用链式方法表达循环嵌套
- C#浮点数的表示和基本运算
- C#中的委托数据类型简介
- C#编写的艺术字类实例代码
- C#实现打造气泡屏幕保护效果
- 举例讲解C#编程中委托的实例化使用
- 使用C#代码获取存储过程返回值
- C和指针小结(推荐)
- C++中explict关键字用法
- C/C++数据对齐详细解析
- 利用C语言来求最大连续子序列乘积的方法
- 字符串的组合算法问题的C语言实现攻略
- C 语言基础教程(我的C之旅开始了)[三]
- 学习C和C++的9点经验总结