liczby

0

musze napisac program ktory bedzie dzialal na baardzo duzych liczbach
jakich uzyc formatuf? moze sa jakies komponenty do delphi dzieki ktorym mozna obliczyc cos wiecej niz extended (chyba)

moze znacie jakies strony o zastowsowaniu Matematyki przez duze "M" w programowaniu?
chodzi mi dokladnie o liczby krolewskie i pierwsze

0

musze napisac program ktory bedzie dzialal na baardzo duzych liczbach
jakich uzyc <font color="red">formatuf</span>? moze sa jakies komponenty do delphi dzieki ktorym mozna obliczyc cos wiecej niz extended (chyba)

moze znacie jakies strony o zastowsowaniu Matematyki przez duze "M" w programowaniu?
chodzi mi dokladnie o liczby krolewskie i pierwsze

Assembler. Chcesz liczbę z zakresu 0..4294967296^4294967296 ? Idealne do liczenia atomów we wszechświecie... I możliwe. Ale nie do mnie o szczegóły, bo jakoś mi ten język jakoś nie wchodzi i po prostu mam go w pierwszych trzech literach jego nazwy, za przeproszeniem.

0

dobrze ale najpierw trzeba to umiec chyba ze ktos mi udowodni ze to jest takie proste to sie sam wezme za assemblera:)

0

na razie czekam na rozwiazania w pascalu lub delphi no i jakies ciekawe stronki

0

Dodawanie i odejmowanie jest banalnie proste.
add eax, edx - dodaje to samo co eax := eax + edx
adc eax, edx - dodaje to samo co eax := eax + edx + przeniesienie z ostatniej operacji
mov edx, Zmienna - kopiuje zmienną do edx
mov Zmienna, eax - kopiuje zawartość eax do zmiennej

Przykład.

type TLiczba = array [0..3] of DWord;
var
L1, L2, L3: TLiczba;
begin
asm
mov eax, dword ptr L1[0]
mov edx, dword ptr L2[0]
add eax, edx
mov dword ptr L3[0], eax
mov eax, dword ptr L1[1]
mov edx, dword ptr L2[1]
adc eax, edx
mov dword ptr L3[1], eax
mov eax, dword ptr L1[2]
mov edx, dword ptr L2[2]
adc eax, edx
mov dword ptr L3[2], eax
mov eax, dword ptr L1[3]
mov edx, dword ptr L2[3]
adc eax, edx
mov dword ptr L3[3], eax
end;
end;

Proste? To oczywiście jest tak zapisane tylko po to, aby było widać prostotę całości. Należałoby to przepisać z nacznie elegancki sposób, tak, że niezależnie od długości liczby można byłoby je sumować.
Ale jeżeli nie chcesz bawić się w asm, to na www.torry.net jest moduł do operacji na liczbach nieskończonej długości integer_asm.pas.

0

co to znaczy ptr ?

0

co to znaczy ptr ?

ptr to skrót od pointer - czyli wskaźnik

mov eax, dword ptr L1[0]

oznacza tyle, co "wstaw do eax wartość wskazywaną przez L1". [0] określa przesunięcie (tu zerowe).

0

no a nie można wstawić do eax bezpośrednio L1[0] ?
mov eax, L1[0]

//nie cytuj całych postów (jak są długie)
//temat został wyjaśniony? via gg

0

no dobra zrobilem sobie prosty program w delphi do obliczania liczbb doskonalych i hmmm liczby do kilku milionuf jakos oblicza a pozniej po prostu przestaje odpowiadac, nie wyswietlaja sie zadne bledy i trzeba go ctrl+alt+del potraktowac.
jak zmodyfikowac kod zeby program odpowiadal w czasie liczenia?
troche zagmatfalem ale...

0

jak zmodyfikowac kod zeby program odpowiadal w czasie liczenia?

Czy chodzi Ci o Application.ProsessMessage; ??

0

no jeszcze nie wiem zara sprawdze. ale chodzi o to ze program sie wiesza w czasie liczenia, ctrl+alt+del i w oknie aplikacji pojawia sie project1 a obok brak odpowiedzi.
z reszta moze znacie sposoby jak przyspieszyc wyszukiwanie np. liczb doskonalych pierwszych itp.

0

Z tego co pamiętam jeszcze ze studiów, a dawno to było, to raczej w tym wypadku nie chodzi o to aby znaleź format który najwięcej zmieści, tylko o zapisaniu liczby jako tablicy cyfr i zdefiniowaniu kilku prostych działań na takich liczbach. Dodawanie i odejmowanie jest bardzo banalne, mnożenie przez stałą banalne. I to zwykle wystarcza.
Pisałem kiedyś klasyki typu 100! czy 2 do potęgi 100.

Z przerywaniem to sprawdzaj w pętli obliczającej czy nie naciśnięto jakiegoś klawisza.

Kris

0

a moglbys mi przeslac jakies zrodelka lub wiesz gdzie to znalezc w necie?
thanks

0

Pisać to mi się nie chce, chyba że bardzo chcesz.

Cofnąć się trzeba do czasów wczesnej podstawówki i przypomnieć sobie słupki.
Dodawanie to po prostu dodwania kolejno cyfr z trzymaniem 1-ynki w "pamięci" jak suma jest >=10.
const MaxLen = 1000; //Masymalna liczba cyfr w liczbie
type BigNum = array [1..MaxLen] of byte; //Reprezentacja liczby
dla prostoty lepiej trzymac je w odwrotnej kolejności.

Dodawanie l1+l2 wynik w l3
i:=1;mem:=0;
while (i

0

hmmm trzeba pokombinowac z tym mnozeniem i dzieleniem jak cos wykombinuje to wysle na forum.
co do pracy domowej to pierwsza rzecz jaka misie nasuwa to wypelnienie tablicy najpierw np. "x" a pozniej dofdawanie dopoki nie ma x - tez nad ty,m jescze popracuje

a jesli ktos mialby cos o zastosowaniu turbo pascala do skomplikowanych obliczen to bym prosil o posta lub mail'a na
[email protected]

0

Widzę, że Pan m_grzywacz gotowca zrobił

Kris

1 użytkowników online, w tym zalogowanych: 0, gości: 1