我们在一些OJ网站刷题时,有时候一些题目的运算结果是浮点数,要求精确到后n位
对于这类型的题,由于浮点数存储的精度问题,有一些细节的地方没顾及到的话,往往就会出现明明运算过程没问题,但就是因为小数点后的一些位与测试用例的预期输出不符,从而无法通过
以下列出几点需要注意的点,希望对大家有所帮助
1、精度
对于结果为浮点数的OJ,尽量使用高精度数据类型,如double、long double,除非题目明确给出参数类型
2、次方运算
在浮点数OJ中,涉及到次方的运算,不应写为a*a这种形式,而应当写为pow(a,2.0),否则小数点后的部分可能与OJ答案不一致,从刷题经验来看,OJ网站更希望大家使用pow函数来计算某一个数的n次方
3、浮点数判断相等
由于浮点数的不精确表示这个原因,我们对判断浮点类型变量时,不能写"a == 0.3"这种形式
两个浮点数变量a,b可能都等于0.3,但是他们在好几位之后的地方并不一定相同,
如0.300000001,0.300000002
所以也不能写a==b
而应当写fabs(a-0.3)<0.000xxx1,fabs(a-b)<0.000xxx1
这里的0.000xxx1表示我们可接受的精度范围,当二者的差的绝对值小于我们允许的精度范围,那么我们就可以说二者是相等的