Newsgroup: it.comp.lang.visual-basic
Titolo: da reale a frazione

come posso fare per portare un numero con la virgola, contenuto in un
textbox, in un numero in frazione???
esempio 0,5 in 1/2


http://vbnet.mvps.org/index.html?code/helpers/numbertofraction.htm
Bye
Raf
-----------------------------------------------------
Funk: cooler than the other side of the pillow.

 
http://vbnet.mvps.org/index.html?code/helpers/numbertofraction.htm
Quella roba non l'avevo ancora vista...E' completamente sbagliata!!!!
Io non sono certo un genio della matematica, ma come si fa a pubblicare 
della roba del genere??? :-O 

 ma come si fa a pubblicare della roba del genere??? :-O
...semplicemente esprime il denominatore della parte frazionaria in base al
parametro LargestDenominator, per cui è veloce ma non ottimale (arrotondandolo
al più vicino multiplo del parametro).
Es. MakeFraction(2.66667, 100) = "2 67/100"
MakeFraction(34.93) = "34 15/16"
Questo dà risultati nettamente migliori, anche se computazionalmente più
pesante:
http://www.freevbcode.com/ShowCode.asp?ID=582


 MakeFraction(34.93) = "34 15/16"
ROTFLLL!!!
LOOOOOL!!!!
E (34 + 15/16) secondo te e' una frazione?
Cioe', un sistema a cui passo un numero decimale e mi restituisce la
somma di un intero e di una frazione, il cui risultato non e' nemmeno
quello iniziale....secondo te e' una roba che FUNZIONA???
Ma dai!!!!
Una frazione e' "un quoziente di numeri interi" (cit.), mica una somma
di un po' di tutto!
2.66667 = 8/3
34.93 = 3493/1000

 pesante:
http://www.freevbcode.com/ShowCode.asp?ID=582
Non solo computazionalmente piu' pesante, ma proprio computazionalmente
eccessivo. Fa di media il 50% di iterazioni in piu' rispetto
all'algoritmo piu' banale, e per ogni iterazione fa operazioni piu'
pesanti.

 di un po' di tutto!
Volendo puntualizzare, esistono le frazioni "proprie" (|denominatore| >
|numeratore|), quelle "improprie", quelle "apparenti"...
Quelle improprie *equivalgono* appunto alla somma di un intero e di una frazione
propria.
Ciao
Raf


E quale sarebbe un esempio di "algoritmo più banale"?
Raf

 propria.
Le frazioni improprie hanno ( |numeratore| >= |denominatore|), e si
scrivono come tutte le altre frazioni.
Dai, su, non scherziamo:
intero + numeratore/denominatore
Non e' una frazione, e' un'espressione. E non e' nemmeno una frazione
impropria, visto che su nessun libro di matematica si trova scritto che
una frazione impropria e' una somma di un intero piu' una frazione...

 Raf
Dato X in ingresso, NumDecimali e' il numero di decimali di X.
Numeratore=0
Denominatore=0
Ciclo
      Denominatore = Denominatore +1
      Numeratore=Numeratore+X
Finche' (Numeratore non e' intero) AND (Denominatore<NumDecimali)
Frazione = Numeratore / Denominatore
Semplice, veloce e lineare.
Puoi fare al volo un confronto con l'altro codice.
Con due decimali, questo cicla al massimo 100 volte. L'altro supera
abbondantemente le 150.
Con tre decimali, questo 1000, l'altro ben oltre i 1500
Con quattro decimali, questo 10000, l'altro ben oltre i 15000
Etc. etc.
Senza considerare che l'altro fa operazioni piu' complesse di due
semplici somme.

 > RafDato X in ingresso, NumDecimali e' il numero di decimali di X.
Vabbe', scritto al volo mentre sono in ufficio.
NumDecimali e' 10^numero di decimali di X

 una frazione impropria e' una somma di un intero piu' una frazione...
Aaaaah, madonna benedetta, ma sei proprio un talebano (che non ha nemmeno letto
bene, tra l'altro): non ho scritto *sono* ma *equivalgono*, ossia HANNO LO
STESSO VALORE.
E con questo ti saluto.
Alla prossima.
Raf


Ok, è un algoritmo apparentemente rapido, ma è grossolano.
Ad esempio non riduce le frazioni ai minimi termini.
Es. se gli passo 5/11 (=0.4545454545454545...) mi dà 142350/313170 (!!!).
Inoltre in quel caso per esempio effettua 313170 loops contro i 14 (!) di
Dec2Frac, quindi come vedi il confronto prestazionale in assoluto non è
possibile.
Sono comunque del parere che sia il tuo che quello di freevbcode siano algoritmi
migliorabili, ad esempio introducendo delle soglie di tolleranza nei confronti
di uscita dai loop...


 possibile.
No, spiacente, l'algoritmo funziona perfettamente :-)
La frazione che da origine al numero 0.4545454545454545 e' proprio
142350/313170 (a parte i problemi di arrotondamento che ti portano a
pescarne una non ai minimi termini, hai usato Single o Double?).
Dec2Frac ti dice 5/11, ma sbaglia e di parecchio. 5 diviso 11 fa 0.45
con 45 periodico, che e' matematicamente NON E' 0.4545454545454545.
Altrimenti la frazione che genera i valori 0.45, 0.454, 0.4545,
0.45454, 0.454545 e' sempre la stessa?
Le frazioni che generano numeri periodici si trovano solo introducendo
VOLONTARIAMENTE un certo margine di errore, per cui se usi la mia
versione (che ha il parametro opzionale Epsilon) ti permetterebbe di
trovare la frazione 5/11 come generatrice di 0.4545454545454545 in 11
cicli, che e' comunque minore di 14...
:-)

 :-)
Ahhhh... ecco, vedi che l'hai migliorato? Con l'epsilon l'hai "umanizzato".
Una curiosità: me lo provi con 0.9999999 e epsilon pari a 0.0001?


io volevo la frazione pura cioè ad esempio 3/4 e non come si scrive in
usa cmq mi avete dato delle idee e delle risoluzioni grazie...