1. 程式人生 > >double類型的精度問題

double類型的精度問題

開始 con 導致 www 免除 double ont 簡單 問題

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類型的精度問題