double类型的精度问题
Posted 华东交通ACM训练基地
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了double类型的精度问题相关的知识,希望对你有一定的参考价值。
https://www.nowcoder.com/acm/contest/127/E
一道很简单的期望题,已知概率p求期望
显然期望为1/p
但在精度处理上就有点麻烦了,题目要求答案以最简分数的形式输出,误差要小于1e-6
但我一开始错误的使用了除法运算求1/p,再求(1/p*1e6)/1e6的最简分数
很显然精度丢失
这是一条大忌,在高精度问题中一定要避免使用除法
所以正解是求1e6/(p*1e6)的最简分数
但这里又有一个精度问题,我们算式里的p,是对题目给出数据q,求p=1.0-q得到的
如果我们直接求1.0-q,同样会丢失精度(经测试,1.0-q只保留小数点后6位,会导致最终误差会大于1e-6)
但先乘以1e6就可以避免这个问题,所以解为1e6/(1e6-1e6*q)
所以在高精度问题中,尽量避免除法,在加减法中也要提防精度丢失
以上是关于double类型的精度问题的主要内容,如果未能解决你的问题,请参考以下文章