[問題] 如何於除法取到小數42位數?

看板Python作者 (嚕啦嚕啦勒)時間6年前 (2018/02/11 11:53), 6年前編輯推噓3(3015)
留言18則, 6人參與, 6年前最新討論串1/1
python內建型別decimal看說明最多可以存到小數後17位, 測試過,十七位後的數字都會是亂數 在這樣的情況下該怎麼取得17位以後的精確數字呢? 我使用的實驗數字是 Decimal(156/283) 計算機算的答案: 0.55123674911660777385 python的答案: 0.55123674911660780484 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 27.105.26.14 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1518321196.A.2BE.html

02/11 12:15, 6年前 , 1F

02/11 12:16, 6年前 , 2F
Decimal(156) / Decimal(283)
02/11 12:16, 2F

02/11 12:16, 6年前 , 3F
Decimal('0.5512367491166077738515901060')
02/11 12:16, 3F

02/11 12:17, 6年前 , 4F
小數後17位是計算機float 的限制
02/11 12:17, 4F

02/11 12:17, 6年前 , 5F
試試看用 getcontext().prec = 42 指定 precision ?
02/11 12:17, 5F

02/11 12:18, 6年前 , 6F
the decimal module has a user alterable precision (defa
02/11 12:18, 6F

02/11 12:18, 6年前 , 7F
ulting to 28 places)
02/11 12:18, 7F

02/11 12:19, 6年前 , 8F
getcontext().prec = 42
02/11 12:19, 8F

02/11 12:19, 6年前 , 9F
是要這樣用 Decimal(156) / Decimal(283)
02/11 12:19, 9F

02/11 12:19, 6年前 , 10F
啊,真快,推文時候已經前面有人回了
02/11 12:19, 10F

02/11 12:21, 6年前 , 11F
其實文件都有..XD (看文件是個好習慣)
02/11 12:21, 11F
感謝大家,已經順利解答。我也是看這份文件一知半解, 的確應該不能在Decimal裡面先做運算,我自己也在getcontext().prec這裡設定錯誤了。 再次謝謝大家協助解惑 ※ 編輯: doun (27.105.26.14), 02/11/2018 21:01:49

02/12 13:56, 6年前 , 12F
另外一個解法,使用sympy..
02/12 13:56, 12F

02/12 13:58, 6年前 , 13F
from sympy import S;S('156/283').n(30)
02/12 13:58, 13F

02/12 13:59, 6年前 , 14F
n()可以設定要的精確度............
02/12 13:59, 14F

03/06 03:41, 6年前 , 15F
03/06 03:41, 15F

03/06 04:19, 6年前 , 16F
03/06 04:19, 16F

03/06 04:32, 6年前 , 17F
03/06 04:32, 17F

03/06 04:45, 6年前 , 18F
文章代碼(AID): #1QVxuiA- (Python)