RE: Oggetto Math

Anzi, a tal proposito, visto che qui ci sono persone che con la
matematica non se la cavano per nulla male, ed io invece ho FORTI
difficoltà , se qualcuno mi aiutasse a trasformare la formula in codice
gli sarei moooolto grato…

la formula in questione è la prima presente su

ed io l’ho implementata come:

@rata = c * ((1+ta/pa)(pa*a)) * ( (ta/pa) / ((1+ta/pa)(pa*a))-1)
il che ovviamente è sbagliato, ma data la mia scarsissima cultura
matematica è il massimo che posso raggiungere.
grazie anticipato a chi ci si cimenterà .

Giuliano U. ha scritto:

@rata = c * ((1+ta/pa)(pa*a)) * ( (ta/pa) / ((1+ta/pa)(pa*a))-1)

Non mi sembra sbagliata, però quando le formule sono co complicate mi
piace riscriverle in più step per mantenere chiarezza:

x = ta/pa
y = (1 + x) ** (pa * a)
@rata = c * y * x / (y -1)

Più leggibile no? :slight_smile:

On 6/7/07, Giuliano U. [email protected] wrote:

@rata = c * ((1+ta/pa)(pa*a)) * ( (ta/pa) / ((1+ta/pa)(pa*a))-1)
il che ovviamente è sbagliato, ma data la mia scarsissima cultura
matematica è il massimo che posso raggiungere.
grazie anticipato a chi ci si cimenterà.

Giuliano, scherzavo per la cosa del ‘**’ :slight_smile:

ma percè dici che la tua formula non va bene? sembra corretta rispetto al
documento che hai linkato.
hai problemi con le regole di conteggio dei giorni o con il tipo di
convenzione usata per l’accumulo degli interessi?
un qualche float che ti scappa da qualche parte forse?

On 6/7/07, Matteo V. [email protected] wrote:

On 6/7/07, chiaro scuro [email protected] wrote:

Io ti consiglio soltanto di scrivere dei test; prendi dei casi di cui
conosci il risultato, di solito sono i casi limite, e verifica che la tua
formula restituisca il risultato corretto con un test automatico

e aggiungo… dato che hai la formula excel… generati con excel un
megatabellone con dati di input e output per molti casi e usalo per
generare
un file cvs che guida i tuoi test.

On 6/7/07, chiaro scuro [email protected] wrote:

On 6/7/07, Giuliano U. [email protected] wrote:

@rata = c * ((1+ta/pa)(pa*a)) * ( (ta/pa) / ((1+ta/pa)(pa*a))-1)
il che ovviamente è sbagliato, ma data la mia scarsissima cultura
matematica è il massimo che posso raggiungere.
grazie anticipato a chi ci si cimenterà.

Io ti consiglio soltanto di scrivere dei test; prendi dei casi di cui
conosci il risultato, di solito sono i casi limite, e verifica che la
tua
formula restituisca il risultato corretto con un test automatico

M

chiaro scuro wrote:

e aggiungo… dato che hai la formula excel… generati con excel un
megatabellone con dati di input e output per molti casi e usalo per
generare
un file cvs che guida i tuoi test.
Io aggiungerei il cosiglio di evitare i float per i calcoli decimali che
devono essere precisi poiche i float sono una approssimazione binaria
dei numeri reali e possono capitare cose “spiacevoli” tipo:

irb(main):002:0> a = 1.20 - 1.00
=> 0.2
irb(main):003:0> b = 0.20
=> 0.2
irb(main):004:0> a==b
=> false

(vedi anche questo thread: Using Float For Currency - Ruby - Ruby-Forum )

ciao,
Luca

Web: http://spazidigitali.com - http://thetyper.com
Email mailto://[email protected]
Skype callto://l.mearelli

On 6/7/07, Luca M. [email protected] wrote:

irb(main):004:0> a==b
=> false

(vedi anche questo thread: Using Float For Currency - Ruby - Ruby-Forum )

Heh. Non è un discorso semplice… che vuol dire “preciso”? Supponiamo
che
evitiamo di usare Float, e rappresentiamo i soldi come un numero intero
di
centesimi. Allora 100 euro sono rapprestentati dall’intero 10000. Ma
cosa
succede se devo dividere 100 euro in 3 pagamenti? Dove finisce il
centesimo
che balla? (Vedi il pattern Money di
Fowlerhttp://www.martinfowler.com/eaaCatalog/money.html
)

In molti casi Float è un’approssimazione accettabile; tieni però conto che
non si devono mai confrontare due Float con ==. L’uguaglianza fra
numeri in
virgola mobile si fa sempre “a meno di un epsilon”, quindi invece di

a == b

devi testare

abs(a - b) < epsilon

dove epsilon è un numero che in teoria dipende dalla precisione della tua
macchina, ma che puoi, se (come me) ignori la teoria, sostituire con un
numero molto piccolo tipo 1e-8 (dipende anche dalla tua applicazione).

M