fork download
  1. #(2^((2^(w-1))-1))*(2-(2^-t))
  2. #2^32倍精度
  3. #(2^((2^(135-1))-1))*(2-(2^-137438953336))
  4. from decimal import *
  5. getcontext().prec = 100
  6. from decimal import localcontext
  7. with localcontext() as ctx:
  8. print(ctx.Emax) # デフォルトの指数上限は999999なので、今回の計算だと足りない
  9. ctx.Emax = 10**10**5 # 指数上限を増やす
  10. #指数部
  11. w = 135
  12. #仮数部
  13. t = 137438953336
  14. a = ctx.power(2,(w - 1))
  15. b = ctx.power(2,(a - 1))
  16. print(b)
  17. c = t * -1
  18. d = ctx.power(2,c)
  19. print(d)
  20. e = (b * 2 - b * d)
  21. #最大値
  22. print("最大値")
  23. print(e)
  24. #必要に応じて有効桁を調整する
  25. format_str = "{:.1e}".format(e)
  26. print(format_str)
  27. f = e.log10()
  28. #桁数-1
  29. print("桁数-1")
  30. print(f.quantize(Decimal('0'), rounding=ROUND_FLOOR))
  31. #桁数
  32. print("桁数")
  33. print(f.quantize(Decimal('0'), rounding=ROUND_CEILING))
  34. g = f.log10()
  35. #桁数の桁数-1
  36. print("桁数の桁数-1")
  37. print(g.quantize(Decimal('0'), rounding=ROUND_FLOOR))
  38. h = ctx.power(2,t)
  39. i = h.log10()
  40. #有効桁数
  41. print("有効桁数")
  42. print(i.quantize(Decimal('0'), rounding=ROUND_FLOOR))
  43.  
Success #stdin #stdout 0.13s 66448KB
stdin
Standard input is empty
stdout
999999999
3.416140176607762835415822243045856181648685321218520620578077442551778894185999818676829070714248812E+6555852764079319280000774992006606892804
0E-1000000098
最大値
6.832280353215525670831644486091712363297370642437041241156154885103557788371999637353658141428497624E+6555852764079319280000774992006606892804
6.8e+6555852764079319280000774992006606892804
桁数-1
6555852764079319280000774992006606892804
桁数
6555852764079319280000774992006606892805
桁数の桁数-1
39
有効桁数
41373247526