Бібліотеки для дій з розрядно-логарифмічними діями. Перевірка оберненої матриці за допомогою одиничної у розрядно-логарифмічній формі. Код розрахунку оберненої матриці за методом Крамера. Алгоритми додавання, віднімання, множення, ділення чисел у РЛ.
Аннотация к работе
Сучасний стан представлення кодування даних у компютерному середовищі може характеризуватися як невідповідний між теоретичними результатами та їх практичним використанням. Якщо у теоретичному плані отримано цілий ряд дуже ефективних розвязань, то на практиці застосовується невелика кількість кодів. Саме різні показники, які визначають ефективність процесу обробки в цілому, складають графічні умови застосування деякої системи числення. Дослідниками можливостей застосування нетрадиційних кодів для реалізації мультиплікативних операцій, а також загальних вимог до конструктивності кодування даних, було запропоновано оригінальне кодування даних, що отримало назву розрядно-логарифмічне. Якщо один з операндів дорівнює нулеві, то в РЛ структуру результату записується РЛ значення іншого операнда і додавання закінчується (перехід до пункту 6).2.1 Розрахунок оберненої матриці за методом Крамера a=1-10**-10 m=[[a,-1,1,-1,1,0,0,0], [1,-1,1,-1,0,1,0,0], [1,-1,0,0,0,0,1,0], [1,0,0,1,0,0,0,1]] i=0 for element in m[2]: m[2][i]=m[2][i]-m[1][i] i=i 1 i=0 for element in m[1]: m[1][i]=m[1][i]-m[3][i] i=i 1 i=0 for element in m[0]: m[0][i]=m[0][i]-m[1][i] i=i 1 i=0 for element in m[0]: m[0][i]=m[0][i]-m[3][i] i=i 1 i=0 for element in m[0]: m[0][i]=element/(a-1) i=i 1 i=0 for element in m[3]: m[3][i]=m[3][i]-m[0][i] i=i 1 i=0 for element in m[1]: m[1][i]=element*-1 i=i 1 i=0 for element in m[1]: m[1][i]=m[1][i]-m[2][i] i=i 1 i=0 for element in m[1]: m[1][i]=m[1][i]-m[3][i] i=i 1 i=0 for element in m[2]: m[2][i]=(m[2][i]-m[3][i])*-1 i=i 1 p=[m[0][4:],m[1][4:],m[2][4:],m[3][4:]] print("Обратная матриця",р) 2.2 Перевірка оберненої матриці за допомогою одиничної m=[[a,-1,1,-1,], [1,-1,1,-1,], [1,-1,0,0,], [1,0,0,1,]] k=[[-9999999999, 9999999999,-0.0,-0.0], [-9999999999, 9999999999,-1.0, 0.0], [9999999999,-9999999998,-1.0, 1.0], [9999999999,-9999999999, 0.0, 1 m_new[0][0]=[m[0][i]*k[i][0] for i in range(len(m[0]))] m_new[0][0]=sum(m_new[0][0]) m_new[0][1]=[m[0][i]*k[i][1] for i in range(len(m[0]))] m_new[0][1]=sum(m_new[0][1]) m_new[0][2]=[m[0][i]*k[i][2] for i in range(len(m[0]))] m_new[0][2]=sum(m_new[0][2]) m_new[0][3]=[m[0][i]*k[i][3] for i in range(len(m[0]))] m_new[0][3]=sum(m_new[0][3]) m_new[1][0]=[m[1][i]*k[i][0] for i in range(len(m[0]))] m_new[1][0]=sum(m_new[1][0]) m_new[1][1]=[m[1][i]*k[i][1] for i in range(len(m[0]))] m_new[1][1]=sum(m_new[1][1]) m_new[1][2]=[m[1][i]*k[i][2] for i in range(len(m[0]))] m_new[1][2]=sum(m_new[1][2]) m_new[1][3]=[m[1][i]*k[i][3] for i in range(len(m[0]))] m_new[1][3]=sum(m_new[1][3]) m_new[2][0]=[m[2][i]*k[i][0] for i in range(len(m[0]))] m_new[2][0]=sum(m_new[2][0]) m_new[2][1]=[m[2][i]*k[i][1] for i in range(len(m[0]))] m_new[2][1]=sum(m_new[2][1]) m_new[2][2]=[m[2][i]*k[i][2] for i in range(len(m[0]))] m_new[2][2]=sum(m_new[2][2]) m_new[2][3]=[m[2][i]*k[i][3] for i in range(len(m[0]))] m_new[2][3]=sum(m_new[2][3]) m_new[3][0]=[m[3][i]*k[i][0] for i in range(len(m[0]))] m_new[3][0]=sum(m_new[3][0]) m_new[3][1]=[m[3][i]*k[i][1] for i in range(len(m[0]))] m_new[3][1]=sum(m_new[3][1]) m_new[3][2]=[m[3][i]*k[i][2] for i in range(len(m[0]))] m_new[3][2]=sum(m_new[3][2]) m_new[3][3]=[m[3][i]*k[i][3] for i in range(len(m[0]))] m_new[3][3]=sum(m_new[3][3]) print("проверка",m_new) #print(m[0]) i=0 for element in m[3]: m[3][i]=minus(m[3][i],m[0][i]) i=i 1 i=0 for element in m[1]: m[1][i]=mnog(element,"1.1.0.") i=i 1 i=0 for element in m[1]: m[1][i]=minus(m[1][i],m[2][i]) i=i 1 i=0 for element in m[1]: m[1][i]=minus(m[1][i],m[3][i]) i=i 1 i=0 for element in m[2]: m[2][i]=mnog(minus(m[2][i],m[3][i]),"1.1.0.") i=i 1 p=[m[0][4:],m[1][4:],m[2][4:],m[3][4:]] print("Обратная матриця",р) """ m=[["0.30.-1.-2.-3.-4.-5.-6.-7.-8.-9.-10.-11.-12.-13.-14.-15.-16.-17.-18.-19.-20.-21.-22.-23.-24.-25.-26.-27.-28.-29.-30.","1.1.0.","0.1.0.","1.1.0."], ["0.1.0.","1.1.0.","0.1.0.","1.1.0."], ["0.1.0.","1.1.0.","0.0.","0.0."], ["0.1.0.","0.0.","0.0.","0.1.0."]] ob_m=[["1.4.29.28.27.26.", "0.4.29.28.27.26.", "0.0.", "0.0."], ["1.4.29.28.27.26.", "0.4.29.28.27.26.", "1.1.0.", "0.0."], ["0.4.29.28.27.26.", "1.29.29.28.27.25.24.23.22.21.20.19.18.17.16.15.14.13.12.11.10.9.8.7.6.5.4.3.2.1.0.", "1.1.0.", "0.1.0."], ["0.4.29.28.27.26.", "1.4.29.28.27.26.", "0.0.", "0.1.0."]] m_new=[["0.0.","0.0.","0.0.","0.0."],["0.0.","0.0.","0.0.","0.0."],["0.0.","0.0.","0.0.","0.0."],["0.0.","0.0.","0.0.","0.0."]] i=0 m_new[0][0]=[mnog(m[0][i],ob_m[i][0]) for i in range(len(m[0]))] k[0]=summa(m_new[0][0][0],
Вывод
У результаті виконання курсового проекту було розроблено програмну модель системи з «безпомилковою арифметикою» на підставі спеціального арифметико-алгоритмічного базису.
Були протестовані програмні коди арифметичних дій у розрядно-логарифмічній формі. На основі створених бібліотек були проведені обрахунки та знаходження оберненої матриці. Шляхом перевірки було доведено, що дані, при обрахунку у розрядно-логарифмічній формі ідентичні простим арифметичним діям.
Отже, розрядно-логарифмічну арифметику можна назвати «безпомилковою арифметикою».
Temp = str(int(Temp1) int(Temp2)) result = sign "." Temp num1[num1.find(".",2):-1] num2[num2.find(".",2):] return result def NUMBERRL(one): """(str)->str
RL number we wanted to sort
>>>NUMBERRL("0.4.3.6.-1.2.")
"0.4.6.3.2.-1."
>>>NUMBERRL("1.3.4.8.0.")
"1.3.8.4.0."
""" one1=one.split(".") one1=list(one1) del one1[-1] for i in range(2,len(one1), 1):#step for j in range(2,len(one1) - 1): if int(one1[j])<int(one1[j 1]): one1[j],one1[j 1]=one1[j 1],one1[j] empty="" for j in range(0,len(one1)): empty =str(one1[j]);empty ="." result=empty return result def equal_to_one(num): """(str) -> str
Return the Rl number with unique elements.
>>> equal_to_one("0.6.5.4.4.2.0.-5.")
"0.4.6.2.0.-5."
""" sign = num[0] temp = num[num.find(".", 2) 1:]
Temp = temp.split(".") del Temp[-1] l = [] for n in range(0, len(Temp)): l.append(int(Temp[n])) for k in l: n = 0; d = [] while n < len(l): if l[n] in l[n 1:]: else: d.append(l[n]); n = 1 l = d; d = [] b = "" for n in range(0, len(l)): b = str(l[n]); b ="."
#b = b[:-1] result = sign "." str(len(l)) "." b return result def C(num1, num2): """(str, str) -> str
Return the largest of two Rl numbers or, if two numbers are equal, return one of them.
Temp1 = temp1.split("."); Temp2 = temp2.split(".") del Temp1[-1] del Temp2[-1] if len(Temp1) >= len(Temp2): for n in range(0, len(Temp2)): if int(Temp1[n]) > int(Temp2[n]): result = num1; break elif int(Temp1[n]) < int(Temp2[n]): result = num2; break else: result = num1 if len(Temp1) < len(Temp2): for n in range(0, len(Temp1)): if int(Temp1[n]) > int(Temp2[n]): result = num1; break elif int(Temp1[n]) < int(Temp2[n]): result = num2; break else: result = num2 return result def summa1for_min_for_0(first, second): ""(str,str)->str
>>>summa1for_min_for_0("0.0.","1.4.8.4.5.6.")
"0.4.8.6.4.3."
""" b="" n=0 if first=="0.0.": if second[0]=="0": for n in range(0, len(second)): b = str(second[n]) result = "1" b[1:] elif second[0]=="1": for n in range(0, len(second)): b = str(second[n]) result = "0" b[1:] return result def summa1for_min_for_0g(first, second): """(str,str)->str
>>>summa1for_min_for_01("1.4.8.4.5.6.","0.0.")
"1.4.8.6.4.3."
""" b="" n=0 if second=="0.0.": if first[0]=="0": for n in range(0, len(first)): b = str(first[n]) result = b elif first[0]=="1": for n in range(0, len(first)): b = str(first[n]) result = b return result def summa1for_min(first, second): """(str,str)->str for 1 and 0" if first=="0.0.": result=summa1for_min_for_0(first,second) elif second=="0.0.": result=summa1for_min_for_0g(first,second) p1="" p="" if first[0]==second[0]=="0": z="1" else: z="0"
#z=second[0] for n in range(0, len(first)): p = str(first[n]) for n in range(0, len(second)): p1 = str(second[n]) first=p1 second=p
#print(first)
#print(second) first=first[first.find(".",2):-1] second=second[second.find(".",2):-1] first=first.split(".") del first[0] second=second.split(".") del second[0] l2 = [] for i in first: if i not in second: l2.append(i) l3 = [] for i in second: if i not in first: l3.append(i) first=l2 second=l3 k=int(first[0]) m=k hop1=[]
#n=int(second[-1])
#print(first)
#print(second) if second==[]: a=[] else :#change second na first n=int(second[-1]) a = [i 1 for i in range(n-1,k-1)] hop1.append(n) del first[0]
#print(hop1,"k") i=0 for element in first: first[i]=int(element);i=i 1 first=first a #print(first) i=0 for element in second: second[i]=int(element);i=i 1
#print(second) do=str(first)
#print(do) dop=str(second)
#print(dop)
#second.append(".") i=0 j=0 hop = [ element for element in first if element not in second ] i=0 for element in hop: hop[i]=int(element);i=i 1 hop=hop hop1
#print(hop) b = "" sign=z for n in range(0, len(hop)): b = str(hop[n]); b ="." resul = sign "." str(len(hop)) "." b