Newsgroup: it.comp.lang.delphi
Titolo: Numeri grandissimi

Ho un problema con dei numeri molto grandi:
for i := 1 to Count do
  [...]
Count è superiore al valore massimo di un Cardinal e posso dichiararlo come 
Int64 ma * i * del for no in quanto il compilatore richiede un ordinal type.
Se lancio lo stesso il ciclo, e questo non me lo spiego, si interrompe con i 
= 234 milioni e spiccioli...ho tolto dal blocco qualunque istruzione ed ho 
lasciato il ciclo vuoto, con una semplice variabile che si incrementa ad 
ogni passaggio...
voi cosa ne pensate? potete fornirmi spiegazioni?
inoltre, è possibile lavorare con numeri + grandi degli Int64? Qualche 
opzione del compilatore?
Grazie
Ciao
Valter

 Int64 ma * i * del for no in quanto il compilatore richiede un ordinal type.
hai provato a NON usare un for?
A.

hai provato a NON usare un for?
dopo averti letto  :-)
while i > 0 // con i: Int64
  dec(i);
Il numero massimo che posso utilizzare è 2^63-1 (Int64)?

 al numero + grande che sia possibile gestire sul pc  :-)
Quindi infinito, visto che esistono librerie per l'aritmetica in
precisione multipla.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 precisione multipla.
Infinito è quello che mi occorre...
Librerie free o a pagamento?
Parto con Google o riesci già ad indirizzarmi?
Temo siano essenziali se voglio portare a termine il progetto 

 Infinito è quello che mi occorre...
se non ricordo male, proprio Andrea aveva presentato (su questo ng o su 
quelli di marco cantù) un modo per gestire numeri con moltissime cifre, 
manipolandoli come stringhe.. 
-- 
Mauro Falzari 
 
  La teoria è quando si sa tutto ma non funziona niente. 
  La pratica è quando funziona tutto ma non si sa il perchè. 
  In ogni caso si finisce sempre a coniugare la teoria con la pratica: 
  non funziona niente e non si sa il perchè. 
   (Albert Einstein)

> Il numero massimo che posso utilizzare è 2^63-1 (Int64)?
annidarne diversi?
è come avere un record
bignumber = record
  d1 : int64;
  d2 : int64;
  etc...
end;
...appena mi torna il mente il nome...c'è una liberia GPL per la
matematica...
Bye,
Raktzo

vedi se puo esserti utile questo
http://www.swox.com/gmp/
Bye,
Raktzo

 matematica...
se ti ricordi, dimmi
Grazie
Valter

 
http://www.swox.com/gmp/
Rapidissimo...
ora guardo
Valter 

Infinito è quello che mi occorre...
Ma non puoi averlo.  Puoi solo avere numeri molto grandi.
Di librerie per l'aritmetica con precisione multipla ce ne sono a
migliaia.  Cerca con Google.

manipolandoli come stringhe.. 
In realtà era un gioco, non utilizzabile in contesti seri, in cui
sopratutto sono richieste le performance ;-)

"Andrea Laforgia" <a.laf...@andrealaforgia.it.invalid> ha scritto nel
messaggio news:bda5i2l3cq7kpv0o6...@4ax.com...

Per la precisione, con i numeri infiniti "ci starei ovviamente dentro" ma in
realtà il mio numero max è finito.
Arrotondando per semplificare è uguale a:
700.000.000 su 10.000.000 = 700M ! / (10M ! (700M-10M) !)
All'interno di questo range qualunque numero max raggiungibile mi è utile
per raggiungere uno degli innumerevoli sottoinsiemi che posso trovare.
Ciao
Valter

 
http://www.swox.com/gmp/
Curiosa parentesi
{Se con la calcolatrice di Win facciamo 25.000 ! otteniamo un bel numerino
in notazione scientifica.
Riuscite a visualizzarlo per esteso?
http://www.swox.com/gmp/#TRY
a spanne è un numero lungo ben 17 metri}
Comunque, dopo una notte semi-insonne di ricerche in rete, test e
contro-test al momento la vedo così:
Il ciclo che sviluppa gli indici in realtà non ha bisogno di conoscere il
numero di cicli compiuti bensì il momento in cui fermarsi...questo è dato
dal primo numero presente nella matrice ed io lo conosco fin dal primo
istante
es:
MyArray[0..6] e MaxNum := 84
All'inizio MyArray contiene 1 2 3 4 5 6 7
alla fine 78 79 80 81 82 83 84
quindi:
while MyArray[0] <> 78 do
  // creo gli indici
Volendo posso usare 2 variabili per tenere conto dei numeri di cicli
azzerandone una ogni tot < al Cardinal ed incrementando contestualmente di
un'unità l'altra...
nell'esempio sopra, usando 50M ogni step, ottengo
Numero di cicli := 90 * 50.000.000 + 29.365.776
Grazie per il vostro aiuto
Valter

 numerino in notazione scientifica.
cavoli è vero, è 5 virgola qualcosa ^ 10 * 99093
Ma...ho provato sempre con la calcolatrice di windows a fare 10^99000 e mi 
dà "Valore non valido".
Boh!



[OT]
Avevo a disposizione 10 minuti di pazzia:
accetta fino a 10^43.429,448 e con i decimali si può continuare, basta 
trovarli...

 trovarli...
sì ma qua la pazzia è di CALC.EXE :-)
come mai invece 25 000! riesce?
