Advertisement
Pietu1998

Base π²

Dec 24th, 2014
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.34 KB | None | 0 0
  1. from math import pi, log, ceil, floor
  2. base = pi ** 2
  3. mode = input("[T]o base or [F]rom base? ")[0].upper()
  4. while not mode in "TF":
  5.     mode = input("[T]o base or [F]rom base? ")[0].upper()
  6. if mode == "T":
  7.     num = orig = float(input("Number: "))
  8.     result = ""
  9.     error = float(input("Maximum error %: ")) / 100
  10.     if num < 0:
  11.         result += "-"
  12.         num = -num
  13.     power = floor(log(num, base))
  14.     if power < -1:
  15.         result += "." + (-power - 1) * "0"
  16.     while num > orig * error or power >= 0:
  17.         mul = num // (base ** power)
  18.         num -= mul * (base ** power)
  19.         if power == -1:
  20.             result += "."
  21.         result += str(int(mul))
  22.         power -= 1
  23.     print(result)
  24.     print("Error: %4.1f%%" % (100 * num / orig))
  25. else:
  26.     num = input("Number: ")
  27.     error = float(input("Maximum error %: ")) / 100
  28.     minus = False
  29.     if num.startswith("-"):
  30.         num = num[1:]
  31.         minus = True
  32.     result = 0
  33.     power = len(num.split(".")[0]) - 1
  34.     for c in num:
  35.         if c == ".":
  36.             continue
  37.         result += int(c) * (base ** power)
  38.         power -= 1
  39.     if minus:
  40.         result = -result
  41.     digits = -len(str(result).split(".")[0])
  42.     while abs(round(result, digits) - result) / result > error:
  43.         digits += 1
  44.     result = round(result, digits)
  45.     print(result)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement