Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def add(a: str, b: str) -> str:
- return str(float(a) + float(b))
- def sub(a: str, b: str) -> str:
- return str(float(a) - float(b))
- def mul(a: str, b: str) -> str:
- return str(float(a) * float(b))
- def compare(a: str, b: str) -> int:
- epsilon = 6
- sub_res = sub(a, b)
- is_neg = False
- if sub_res[0] == '-':
- sub_res = sub_res[1:]
- is_neg = True
- if sub_res.startswith("0." + "0"*epsilon):
- return 0
- return -1 if is_neg else 1
- def div_2(a: str):
- return str(float(a) / 2)
- def div(a: str, b: str) -> str:
- max_range = '0'
- min_range = '0'
- dif = '1'
- max_loop = 100000
- current_loop = 0
- is_neg = False
- if a and a[0] == '-':
- is_neg = not is_neg
- a = a[1:]
- if b and b[0] == '-':
- is_neg = not is_neg
- b = b[1:]
- # find min_range, max_range (giới hạn trên và dưới của kết quả phép chia)
- while compare(mul(b, max_range), a) != 1:
- if current_loop > max_loop:
- break
- current_loop += 1
- min_range = max_range
- max_range = add(max_range, dif)
- dif = mul(dif, '2')
- current_loop = 0
- # Tìm kết quả phép chia bằng chia nhị phân
- while current_loop <= max_loop:
- current_loop += 1
- mid = div_2(add(min_range, max_range))
- compare_res = compare(mul(b, mid), a)
- if compare_res == 0:
- break
- elif compare_res == 1:
- max_range = mid
- else:
- min_range = mid
- if is_neg:
- mid = '-' + mid
- return mid
- print(div('12312321.123', '123'))
Advertisement
Add Comment
Please, Sign In to add comment