Merevoli

Untitled

Nov 3rd, 2022 (edited)
986
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.76 KB | None | 0 0
  1. def add(a: str, b: str) -> str:
  2.     return str(float(a) + float(b))
  3.  
  4. def sub(a: str, b: str) -> str:
  5.     return str(float(a) - float(b))
  6.  
  7. def mul(a: str, b: str) -> str:
  8.     return str(float(a) * float(b))
  9.  
  10. def compare(a: str, b: str) -> int:
  11.     epsilon = 6
  12.     sub_res = sub(a, b)
  13.     is_neg = False
  14.    
  15.     if sub_res[0] == '-':
  16.         sub_res = sub_res[1:]
  17.         is_neg = True
  18.        
  19.     if sub_res.startswith("0." + "0"*epsilon):
  20.         return 0
  21.     return -1 if is_neg else 1
  22.  
  23. def div_2(a: str):
  24.     return str(float(a) / 2)
  25.  
  26. def div(a: str, b: str) -> str:
  27.     max_range = '0'
  28.     min_range = '0'
  29.     dif = '1'
  30.     max_loop = 100000
  31.     current_loop = 0
  32.    
  33.     is_neg = False
  34.     if a and a[0] == '-':
  35.         is_neg = not is_neg
  36.         a = a[1:]
  37.    
  38.     if b and b[0] == '-':
  39.         is_neg = not is_neg
  40.         b = b[1:]
  41.    
  42.     # find min_range, max_range (giới hạn trên và dưới của kết quả phép chia)
  43.     while compare(mul(b, max_range), a) != 1:
  44.         if current_loop > max_loop:
  45.             break
  46.         current_loop += 1
  47.        
  48.         min_range = max_range
  49.         max_range = add(max_range, dif)
  50.         dif = mul(dif, '2')
  51.        
  52.     current_loop = 0
  53.    
  54.     # Tìm kết quả phép chia bằng chia nhị phân
  55.     while current_loop <= max_loop:
  56.         current_loop += 1
  57.        
  58.         mid = div_2(add(min_range, max_range))
  59.         compare_res = compare(mul(b, mid), a)
  60.        
  61.         if compare_res == 0:
  62.             break
  63.         elif compare_res == 1:
  64.             max_range = mid
  65.         else:
  66.             min_range = mid
  67.    
  68.     if is_neg:
  69.         mid = '-' + mid
  70.        
  71.     return mid
  72.    
  73. print(div('12312321.123', '123'))
  74.  
  75.        
  76.        
  77.        
  78.    
Advertisement
Add Comment
Please, Sign In to add comment