aritmetica pe termen lung (autor Okulov cu
Este cunoscut faptul că operațiile aritmetice executate de un computer într-un număr limitat de biți nu este întotdeauna posibil să se obțină un rezultat precis. Mai mult decât atât, suntem limitați prin numerele mărime (magnitudine) cu care putem lucra. Și dacă avem nevoie pentru a efectua operații aritmetice pe numere foarte mari, de exemplu, 30! = 265252859812191058636308480000000?
În astfel de cazuri, trebuie să aibă grijă de reprezentarea numerelor în mașină și pe operațiile aritmetice precise sunt efectuate pe ele.
Numerele pentru a reprezenta într-un standard de tipuri de date de calculator nu este suficient numărul de biți, denumit în continuare „lung“. Punerea în aplicare a operațiilor aritmetice cu privire la astfel de numere „lungi“, se numește „aritmetică lungă.“
Organizația lucrează cu numere „lungi“ depinde de modul în care vom prezenta în computer aceste numere. Numărul de „lung“ poate fi scris, de exemplu, folosind o serie de cifre zecimale, numărul de elemente din această matrice este numărul de cifre semnificative în numărul „lung“. Dar dacă vom pune în aplicare operații aritmetice pe aceste numere, cu dimensiunea de matrice trebuie sa fie suficient de mare pentru a găzdui și rezultatul este, de exemplu, multiplicarea.
Există și alte vizualizări numere „lungi“. Luați în considerare una dintre ele. Noi reprezentăm numărul nostru
30! = 265252859812191058636308480000000 ca:
30! = 2 * (10 4) 8 + 6525 * (10 4) 7 + 2859 * (10 4) + 8121 * (10 4) 5 + 9105 * (10 4) 4 + 8636 * (10 4) 3 + 3084 * (10 4) 2 + 8000 * (10 4) 1 + 0000 * (10 4) 0.
Acest punct de vedere sugerează ideea unei matrice prezentate în tabel. 1.
Numărul elementului din matrice A
Algoritmul simulează adăugarea obișnuită a unei coloane, începând cu biții cei mai puțin semnificativi. Și doar pentru a facilita punerea în aplicare a operațiunilor aritmetice pe numere „lungi“ folosite de reprezentare mașină „înapoi“.
Rezultat: C = 3476782713546912.
Mai jos este textul procedurii plus, două numere de „lungi“.
A patra sarcină. Implementarea operațiunilor de comparare pentru numerele întregi "lungi" (A = B, A B, A = B).
Realizarea A> B este de asemenea transparent.
Funcțiile rămase sunt puse în aplicare prin intermediul funcției și a ecuației Mai mult.
Sfaturi următoare, sarcina mai complexe pot fi oferite. Este necesar să se dezvolte o funcție care dă 0 dacă A este mai mare decât B 1, dacă A este mai mică decât B și 2, cu un număr egal. Cu toate acestea, comparația trebuie făcută în considerarea schimbare. Ce este vorba? Aici este un exemplu. Să presupunem că A este 56784, și B - 634. Cu trecerea la stânga a funcției trebuie spus în poziția 2, care, în mai O schimbare fără ca A este mai mare decât B. Un alt exemplu. Dacă A este egal cu 56700 și B - 2 567 și o funcție de schimbare ar trebui să „spună“ că numerele sunt egale. Soluția poate fi după cum urmează:
A cincea provocare. Multiplicarea lungimea scurt. Sub scurt înțeles tip întreg LongInt.
Procedura este mult ca procedura de adăugare a două numere întregi lungi.
A șasea sarcină. Scăderea a două numere lungi date de forfecare
În cazul în care conceptul de schimbare nu este clar încă, lasă-l în pace, de fapt, schimbare de scădere dată este necesară în punerea în aplicare a operației de împărțire. La început afla logica procedurii de forfecare zero.
O restricție: numărul de la care a fost scăzut, mai mult decât numărul care se scade. Lucrul cu numere negative „lungi“, nu știm cum.
Procedura ar fi similar cu procedurile de adunare și de multiplicare, dacă nu un „dar“ - împrumut câteva dintre cel mai semnificativ bit în loc de transfer unitate la MSB. De exemplu, în notația convențională, scădem 9 din 11 - 1 este împrumutată din cifra zecilor, iar dacă vom scădea 9 din 10000 - împrumut proces mai complicat.
A șaptea sarcină. Împărțind cele două numere întregi lungi, adică găsirea partea întreagă a câtului și restul.
Scrieți original (fără a se specifica) din logica este ușor. Acestea sunt:
Și apoi? Apoi, problemele încep. coloana Ponderea ne sunt predate în școală. De exemplu,
Ce facem? La fiecare etapă, în număr de minte cules (1, 3, 5, etc.), astfel încât produsul acestui număr de numărul împărțitor oferă minim, dar cel mai aproape de numărul. Care? Este greu de spus cuvintele, dar este clar din exemplul. De ce facem acest lucru în minte, lăsați calculatorul să nu. Cu toate acestea, exemplul simplu, să-l părăsească pentru testarea finală a procedurilor logice, mai ales ca numarul de „lungi“. Lăsați numărul A este mai puțin Vnbsp * 10, atunci rezultatul (partea întreagă a diviziunii) va fi o singură cifră. De exemplu, A este 564 și B - 63 și sistem zecimal simplu. Să încercăm să ridice rezultatul număr, dar nu forta bruta, ci de a segmentului de împărțire în două. Să Jos - limita superioară a intervalului numerelor spicuite, Up - a intervalului, Ost este egal cu dividendul.
C = B * ((Jos + Up) Div 2)
Partea întreagă a câtului este de 78, restul de divizare - 27856 minus 27612, adică 244.
Este timpul pentru a aduce procedura. Folosit „cărămizi“: funcția de numere de comparație (Mai mult) cu funcția de deplasare și multiplicarea scurtă lungi (MUL) descrise mai sus.
Rămâne de a face cu o valoare de schimbare a variabilei în expunerea sp nostru. Revenim la sistemul de numărul normal, și să încerce să împartă, de exemplu, 635 la 15. Ce facem? La început vom împărți 63 până la 15 și de formă, vom selecta prima cifră a rezultatului în minte. Pick up cu un computer, am învățat. A crescut - această cifră este de 4, și este rezultatul unei cifre semnificative. Schimbați reziduuri. Dacă la început a fost 635, acum am devenit 35. Scădeți luând în considerare trecerea putem. Din nou, selectați cifra. A doua cifră a rezultatului. Acesta este numărul 2 și restul 5. Astfel, rezultatul (partea întreagă) 42, restul de divizare 5. Ce se va schimba dacă baza nu este 10, dar 10.000? Logica este aceeași, doar în minte să ia în considerare un pic mai dificil, dar că avem, de asemenea, un ciocan numit un calculator - chiar dacă el conduce unghiile.
Recomandări metodice. Materialul prezentat aici este prezentat în patru clase în funcție de model cunoscut: prezentarea 10-15 minute a ideilor, și apoi activitatea elevilor sub îndrumarea unui profesor.
Prima ocupație. Intrare, ieșire și adăugarea de numere lungi (sarcini de 1, 2, 3).
A 2-a sesiune. Funcția comparație (obiectivul 4).
Activitatea 3-a. Multiplicarea și scădere numere lungi (sarcini 5, 6).
Patra lecție. Divizeaza numere lungi (task 7). Desigur, acest sistem nu este o dogmă. În funcție de nivelul de pregătire a studenților la auto-împlinire pot fi scoase o mare parte din material. Voi nota doar că, datorită tradiției într-un număr de cazuri permise în descrierea unei erori conștientă. Ca rezultat al fiecărui elev trebuie să aibă propriul lor modul de a lucra cu numere de „lungi“.
Subiecte pentru cercetare
1. Rezolvarea problemelor: căutare pentru cel mai mare divizor comun a două numere „lungi“; Găsiți cel mai mic multiplu comun a două numere „lungi“; având o rădăcină pătrată a „lungi“ și numere, etc.
2. Numerele „lungi“ poate fi negativă. Cum va pașii de mai sus pentru acest caz?
3. Pentru a stoca numere întregi „lungi“ matrice nu este utilizat, iar stiva este implementată utilizând lista. Modificarea lucrărilor modul cu numere „lungi“.
Site-ul creat în sistemul uCoz