Novità

Overflow nel calcolo fattoriale

surmang

Super Member >PLATINUM<
Salve,
qualcuno saprebbe indicarmi come calcolare in Spaziometria il fattoriale di numeri superiori a 170 ?
Grazie.



Sub Main
Dim n
n = CInt(InputBox("Inserire il numero ","Calcolo fattoriale",170))
Scrivi "Fattoriale del numero " & n & " = " & Fattoriale(n)
End Sub

Public Function Fattoriale(n)
If n < 0 Then Fattoriale = - 1
If n = 0 Then Fattoriale = 1
If n > 0 Then Fattoriale = n * Fattoriale(n - 1)
End Function
 
Salve,
qualcuno saprebbe indicarmi come calcolare in Spaziometria il fattoriale di numeri superiori a 170 ?
Grazie.



Sub Main
Dim n
n = CInt(InputBox("Inserire il numero ","Calcolo fattoriale",170))
Scrivi "Fattoriale del numero " & n & " = " & Fattoriale(n)
End Sub

Public Function Fattoriale(n)
If n < 0 Then Fattoriale = - 1
If n = 0 Then Fattoriale = 1
If n > 0 Then Fattoriale = n * Fattoriale(n - 1)
End Function


Tramite la formula di Stirling n!=n^n *exp(-n) * radq(2 * pi.greco() * n)
con un errore massimo di 1 / (11 * n )
:)
 
Tramite la formula di Stirling n!=n^n *exp(-n) * radq(2 * pi.greco() * n)
con un errore massimo di 1 / (11 * n )
:)

Ciao pico2005:) ti ringrazio per l'interessamento,
gia sono a conoscenza dell' approssimazione di Stirling,
il punto è che essendo neofita del VB6 ed un somaro in matematica,
non mi riesce di tradurre il tutto in linguaggio che sia "digeribile per Spaziometria".
Poi ti faccio notare che nella forma da te indicata, n^n va gia in overflow per un valore di n=144 .
Quindi rinnovo la richiesta.
Grazie.



notarta_big.jpg
 
Option Explicit
Sub Main
Dim n , a
n=170
a= ((n/Exp(1))^n) * Sqr(2* PI_ * n)
Scrivi a
End Sub



risposta = 7,25386741587675E+306

Spero vada bene ciao
 
Ultima modifica:
Option Explicit
Sub Main
Dim n , a
n=170
a= ((n/Exp(1))^n) * Sqr(2* 3.14 * n)
Scrivi a
End Sub



risposta = 7,25202000277767E+306

Spero vada bene ciao

Grazie pico2005, sei molto gentile ad interessarti al mio problema,
il fatto è che anche utilizzando il codice scritto sopra, per n maggiore di 170
va comunque in overflow!
Grazie ciao



notarta_big.jpg
 
HPIM2966.jpgHPIM2968.jpg

E questo un vecchio Programma dal testo "Programmi pratici in Basic" della Jackson
per aumentare il numero trattato oltre il fatidico 170 per PC 32 bit e questo solo per
visualizzarne il valore e non per ulteriori calcoli sempre tramite artifizi matematici.

:D
 
Caio Pico,

scusa se mi intrometto ...

Overflow non è un errore dell'algoritmo ma la dichiarazione di resa da parte del Pc ...

difronte alla dimensione enorme del risultato che cresce "esponenzialmente".

Un risultato che cresce sino ad arrivara ad una dimensione così grande

che non può essere contenuta nei 8/16/32/64 bit di cui dispongono i nosti Pc

Questo piccolo programma ... ti dimostra come il risultato "fattoriale di x"

cresca fino a calcolare correttamente il fattoriale di 170.

Codice:
Sub Main ()
X = 170
Scrivi Fattoriale (X)
End Sub


Function Fattoriale(n) 

Dim i , ris 

ris=1

For i=2 To n

ris = ris*i

Scrivi ris

Next

Fattoriale = ris


End Function


Il risultato : 7,25741561530799E+306


significa 7 seguito da "306" ZERI SIGNIFICATIVI. Un numero enorme. Inimmaginabile.

Si deve dunque ricorrere a stratagemmi (quali quello da te allegato) per calcolare dei fattoriali maggiori ...

o disporre della potenza di calcolo di super-computer.

:)
 
X JOE91

Ciao Joe grazie per essere intervenuto, scusate ma non pensavo di aver bisogno dell'elaboratore della nasa, nella mia "beata ignoranza " visto che la calcolatrice di Windows va notevolmente oltre non immaginavo di chiedere la luna.
fattoriale 1000x1000.JPG

Pace anche a te
 
Ultima modifica:
anche riuscendo ad ottenre il valore (volendo potrei creare anche una funzione esterna che lo calcoli senza overflow) il problema sarebbe che il risultato non sarebbe trattabile come numero in vbscript e pertanto non utilizzabile per nessun tipo di calcolo ..
Per curiosita a che ti serve un fattoriale per numeri maggiori di 170 ?
 
anche riuscendo ad ottenre il valore (volendo potrei creare anche una funzione esterna che lo calcoli senza overflow) il problema sarebbe che il risultato non sarebbe trattabile come numero in vbscript e pertanto non utilizzabile per nessun tipo di calcolo ..
Per curiosita a che ti serve un fattoriale per numeri maggiori di 170 ?


Salve LuigiB, grazie per l'attenzione, sto divertendomi a smanettare con il VB6 cercando di imparare qualcosina in piu', come gia detto avevo visto che la calcolatrice di windows calcola il fattoriale di numeri piu' grandi di 170 all'istante ,e questo mi ha fatto immaginare che vi fosse una modalità non complessa di effettuare calcoli simili anche in Spaziometria, ma evidentemente non è cosi'.
Grazie ancora per l'interessamento ed anche per aver dato la possibilità a tutti noi di utilizzare gratuitamente il programma Spaziometria, per cui anche se superflui rinnovo
i complimenti.

Vedi l'allegato 4641
 
ciao il problema non è spaziometria ma il linguaggio vbscript visto che stai studiando il vb6 entro un pochino nel tecnico.
Il vbscript ha un unico tipo di dati ovvero il tipo variant che a sua volta puo contenere un dato di un sottotipo specifico.
Ecco la tabellina

Immagine.png


purtroppo valori piu grandi del double semplicemente non possono essere gestiti.
Ora tu ti chiederai ma come mai la calcolatrice di windows ci riesce ? Risposta la calcolatrice di windows non è scritta
in vbscript :-) e nemmeno in vb6 .. ci sono linguaggi molto più potenti che consentono anche di gestire numeri piu grandi
perche espongono altri tipi di dati in grado di farlo
poi per problemi specifici di matematica ci sono programmi come mathlab che con processori matematici virtuali possono gestire
anche numeri moto grandi , per il calcolo combinatorio necessario ad esempio per calcolare quante combinazioni di cinquine si sviluppano con 90 numeri (tipico contesto in cui servono i fattoriali) vb6 va benissimo e anche il vbscript.

un saluto
 
Ultima modifica di un moderatore:
ciao il problema non è spaziometria ma il linguaggio vbscript visto che stai studiando il vb6 entro un pochino nel tecnico.
Il vbscript ha un unico tipo di dati ovvero il tipo variant che a sua volta puo contenere un dato di un sottotipo specifico.
Ecco la tabellina

Immagine.png


purtroppo valori piu grandi del double semplicemente non possono essere gestiti.
Ora tu ti chiederai ma come mai la calcolatrice di windows ci riesce ? Risposta la calcolatrice di windows non è scritta
in vbscript :-) e nemmeno in vb6 .. ci sono linguaggi molto più potenti che consentono anche di gestire numeri piu grandi
perche espongono altri tipi di dati in grado di farlo
poi per problemi specifici di matematica ci sono programmi come mathlab che con processori matematici virtuali possono gestire
anche numeri moto grandi , per il calcolo combinatorio necessario ad esempio per calcolare quante combinazioni di cinquine si sviluppano con 90 numeri (tipico contesto in cui servono i fattoriali) vb6 va benissimo e anche il vbscript.

un saluto

Grazie LuigiB, grazie per la piccola lezione ,e la grande gentilezza.

Saluti fattoriali:)
 

Ultima estrazione Lotto

  • Estrazione del lotto
    sabato 19 luglio 2025
    Bari
    70
    37
    36
    68
    01
    Cagliari
    57
    02
    64
    33
    41
    Firenze
    18
    62
    09
    05
    06
    Genova
    36
    10
    74
    37
    42
    Milano
    39
    07
    58
    23
    22
    Napoli
    18
    69
    28
    36
    40
    Palermo
    71
    66
    72
    64
    23
    Roma
    19
    64
    39
    77
    10
    Torino
    83
    63
    71
    08
    72
    Venezia
    51
    83
    26
    50
    74
    Nazionale
    89
    81
    63
    32
    03
    Estrazione Simbolotto
    Nazionale
    16
    32
    21
    19
    03
Indietro
Alto