码迷,mamicode.com
首页 > 其他好文 > 详细

double类型的精度问题

时间:2018-06-03 16:22:26      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:误差   数据   避免   有一个   除法   问题   题目   test   但我   

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类型的精度问题

标签:误差   数据   避免   有一个   除法   问题   题目   test   但我   

原文地址:https://www.cnblogs.com/qq936584671/p/9129360.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!