Newsgroup: it.comp.java
Titolo: [da leggere] quanto fa 0.2 - 0. 2 ?

Non sto scherzando purtroppo.
In tanti mi avevano avvisato che java non digerisce i numeri in virgola, ma
non ci ho voluto credere fino tanto che non ho cominciato a lavorare con
l'Euro.
Il numero di classi dedicate alla gestione dei numeri in virgola già la dice
lunga ma quelloo che ho visto è a dir poco ridicolo.
Java non sa fare la sottrazione tra due numeri in virgola.
Non so per quale strano motivo alcuni numeri gli fanno comnpletamente
saltare i calcoli.
Provare per credere.
Quì c'è un piccolo programmino che ho realizzato per capire se era un
problema di qualche classe o di qualche bug del mio programma che faceva
sfarfallare Java.
Questo micro test mi ha tolto ogni dubbio.
Viva il vecchio TurboC 2.0 per DOS, non sapeva disegnare una finestra
Windows, ma sapeva fare 2+2.
public class Sottrai
{
    double num1 = 45.19;
    double num2 = 4.80;
    public static void main(String argv[])
    {
        new Sottrai();
    }
    public Sottrai()
    {
        double tot = 0;
        tot -= num1;
        tot -= num2;
        System.out.println(""+tot);
    }
}


hai provato i BigInteger o BigDecimal o qualcosa del genere? non
garantisco nulla ma la documentazione li ritiene adatti per effettuare
precisi calcoli monetari.
ciao
-- 
Seti@Home Java Applets
http://maruko.cjb.net/

Per quelli che mi suggeriranno i vari BigInteger e BigDecimal aggiungo altro
codice che fa ancora più ridere.
Come può funzionare un'oggetto quando il tipo di dato base non funziona?
Poi ci lamentiamo dei bilanci dell'Italia. Ci credo se i programmi di
gestione sono fatti in Java è tutto dire.
import java.math.BigDecimal;
public class Sottrai2
{
    BigDecimal num1 = new BigDecimal(45.19);
    BigDecimal num2 = new BigDecimal(4.8);
    public static void main(String argv[])
    {
        new Sottrai2();
    }
    public Sottrai2()
    {
        BigDecimal tot = new BigDecimal(0.0);
        System.out.println("tot"+tot.toString());
        System.out.println("num1"+num1.toString());
        System.out.println("num2"+num2.toString());
        tot.subtract(num1);
        System.out.println("tot"+tot.toString());
        tot.subtract(num2);
        System.out.println("tot"+tot.toString());
        System.out.println(""+tot);
    }
}

Ma non capisco dove sia il problema?!?!?!
Il programmino qui sotto funziona correttamente, come risultato
produce -49.989999999999995
infatti a tot assegni 0 - 45.19 e poi sempre a tot assegni - 45.19 - 4.80
che da appunto -49.9899......
Non capisco cosa vuoi dire.


 Non capisco cosa vuoi dire.
-- 
Posted from  [213.140.22.154] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Fatevi altre risate.
Allora, il BigDecimal č una soluzione alla mia problematica, ma solo se
usato in una certa maniera.
Io ho risolto cosě :
BigDecimal ret = new BigDecimal(""+totEuro);  // passo il valore sballato in
Euro alla classe bigDecimal
ret=ret.setScale(2,ret.ROUND_UP);                // lo forzo a lavorare con
2 cifre decimali e ad arrotondare
ATTENZIONE !!!!!!!!!!!!
Come avrete notato ho passato il double castandolo a stringa.
Perchč?
Perchč anche la classe BigDecimal č BACATA.
Passate un double al BigDecimal e poi fate nomeIstanza.toString() e vedrete
che il numero da voi passato diventa a 30 cifre decimali sparate
letteralmente a cazzo.
Se passato come stringa SEMBRA funzionare.
Ho guardato sul sito della sun se c'era qualcosa sul problema della gestione
dei numeri double.
Ecco uno soltanto dei vari post sul problema e con una risposta che fa
pensare.
http://java.sun.com/products/jdk/rmi/archives/6936.html
Provate a cercare sul tanto decantato 
http://java.sun.com
 la stringa double
problem e vi renderete conto con che cosa il mondo sta lavorando.
Poi diciamo della Microsoft. In compenso sono degli angeli. Almeno i loro
prodotti sanno fare una sottrazione.

 wrote in message
news:9vk9np$1cvm$1...@stargate1.inet.it...


 prodotti sanno fare una sottrazione.
nessuno ti obbliga a non passare a C#.
Anzichč tutto questo astio verso Sun perchč non posti qualcosa di 
costruttivo?
Kali

 problem e vi renderete conto con che cosa il mondo sta lavorando.
Fa pensare che tu non conosca l'inglese... ;)
A parte gli scherzi... prova a leggerti un po' meglio la documentazione o
cercare fra i post precedenti.
Ma prima di vaneggiare di bachi, complotti, o altro assicurarti di sapere bene
di cosa parli, oppure poni le questioni in altri termini, magari qualcuno ti
aiutera'.
uL
-- 
Posted from 
hebrides.eu.sun.com
 [192.18.240.6] 


"Kali" wrote:

Non iniziamo una discussione C# (microsoft) vesrus java (sun) altrimenti si 
finisce come su it.comp.programmare.
(cmq ha scovato un bel bug :-P)
-- 
Posted from  [213.140.22.154] 



Consiglio a tutti di ripassare la rappresentazione dei numeri in
virgola mobile all'interno dei calcolatori......
Utile a questo proposito Numerical Recipes in C, Capitolo 1.3.
Lo trovate su: 
http://www.ulib.org/webRoot/Books/Numerical_Recipes/bookc.html
Carlo.

 finisce come su it.comp.programmare.
infatti, era questo il significato del mio post....
Kali

 costruttivo?
Be se vuoi posso anche postare tutte le mie (anche se poche in confronto a
molti altri frequentatori) conoscenze, ma penso che sia molto utile sapere
che la prossima volta che faremo una sottrazione o una divisione
probabilmente java sbaglierà e che potrebbe farti sballare l'applicazione.
Sai quelli che pagano le applicazioni, non amano molto vedere i programmi
sballare una sottrazione.
Ovvio che parlo di applicazioni gestionali e sai di questi tempi con l'Euro
le virgola sono molto importanti, perché sono soldi e non pixel.

 Non sto scherzando purtroppo.
Ed e' questo il problema... ;-)
-- 
Life's something u don't get out alive..
ObjectZone - 
http://space.tin.it/computer/csadun

 aiutera'.
Be se non è un baco il fatto che Java non riesce a fare una sottrazione tra
due numeri in virgola, o il diverso comportamento della classe BigDecimal in
relazione al tipo di dato passato al costruttore.................
Siamo tutti pronti a sputare su Microsoft, ma quando si parla della ciotola
in cui mangiamo, non si riesce ad essere obbiettivi.
Non trovi?
Cmq. polemiche a parte volevo solo sollevare il problema (anzi prima non
sapevo come affrontarlo poi sono riuscito a risolvermelo da solo), che
potrebbe essere utile per tutte quelle persone che devono lavorare con tali
numeri e penso che non siamo in pochi.

Allora, dai tuoi esempi è chiaro che non hai capito bene il funzionamento
dei numeri nei calcolatori.
L'approssimazione è data dalla loro rappresentazione binaria, mantissa ed
esponente. Ma non scendo in particolari (vedi in coda messaggio).
Per quanto riguarda i tuoi esempi, partendo dal BigDecimal, devo
sottolinearti alcuni errori.
Il primo è questo:
BigDecimal num1 = new BigDecimal(45.19);
Se dichiari un BigDecimal partendo da un double, ed il double soffre dei
problemi di approssimazione, è chiaro che il risultato memorizzato nel
BigDecimal soffrirà dello stesso problema.
Prova così:
    BigDecimal num1 = new BigDecimal("45.19");
vedrai che andrà tutto meglio.
Il secondo errore è il seguente:
        tot.subtract(num1);
con evidente errore di utilizzo del metodo subtract.
Prova così:
        tot = tot.subtract(num1);
In definitiva, il tuo codice, rivisto e corretto è:
import java.math.BigDecimal;
public class Sottrai2
{
    BigDecimal num1 = new BigDecimal("45.19");
    BigDecimal num2 = new BigDecimal("4.8");
    public static void main(String argv[])
    {
        new Sottrai2();
    }
    public void Sottrai2()
    {
        BigDecimal tot = new BigDecimal("0.0");
        System.out.println("tot"+tot.toString());
        System.out.println("num1"+num1.toString());
        System.out.println("num2"+num2.toString());
        tot = tot.subtract(num1);
        System.out.println("tot"+tot.toString());
        tot = tot.subtract(num2);
        System.out.println("tot"+tot.toString());
        System.out.println(""+tot);
    }
}
E l'output del programma (con qualche spazio in più) è:
tot 0.00
num1 45.19
num2 4.8
tot -45.19
tot -49.99
-49.99
Ti consiglio di dare un'occhiata qui:
http://developer.java.sun.com/developer/JDCTechTips/2001/tt0807.html#tip1
Ciao.

         tot = tot.subtract(num1);
In effetti hai ragione, me ne sono accorto solo dopo che la utilizzavo
premendo semplicemente F1 sul metodo e leggendo la documentazione.
Quì si potrebbe obbiettare il modo di funzionamento di questa classe, ma se
la sun vuole che funzioni così io mi attengo e la prossima volta leggerò la
documentazione prima di usare una classe.
Cmq. grazie per le critiche e per il supporto dato.

 
<MOLTO OT>
No, non trovo, e l'obiettivita' in questo discorso e' importante come il famoso
due di coppe. Fra l'altro i lavori si cambiano,
sai,  e' relativamente poco che sono in Sun rispetto ai tanti anni ormai da cui
frequento il ng, e non e' detto che ci lavori per sempre.
E il ng lo frequento io, come U.Landini, non la Sun Microsystems. Che qualcuno
mi possa dare piu' credito per il fatto che lavori nella casa madre di Java e'
per me piu' un problema che altro , credimi.
</MOLTO OT>
Da quello che scrivi e' invece oggettivo (per chi conosca il noto e annoso
"misunderstanding" di chi comincia ora con Java e la virgola mobile) che tu non
sappia
di cosa scrivi, e da come lo scrivi che usi un tono sgradevole: se non fosse
che qualcuno potrebbe prenderti sul serio, non importerebbe nulla a nessuno
(sai, tutti qui ci aiutiamo perche' ci piace la tecnologia OO, e nessuno ci
guadagna niente: vedere vanificate le risposte e le consulenze *gratuite* di
anni con un paio di mail minatorie farebbe incazzare anche un buddista)


 Cmq. grazie per le critiche e per il supporto dato.
Figurati. Buon lavoro.

 memoria in base alle caratteristiche del S.O e/o dell'HW.
...e a scrivere documentazione per un linguaggio di programmazione.. :)


assolutamente errato matematicamente.
centra eccome: se scrivi 45.19 scrivi un double, quindi il numero
verrà gestito con le modalità del double.
Il fatto che il double faccia pietà ormai lo abbiamo capito..
ciao

 Il fatto che il double faccia pietà ormai lo abbiamo capito..
Secondo me è allucinante, mai trovato questo problema in nessun linguaggio
di programmazione, e credimi ne ho visti.
Anche se non sono un espressione comunque ho lavoricchiato con l'Assembler,
C, Pascal, Basic, Lingo (linguaggio per Macromedia Director); ma nessuno ha
mai evidenziato tali bug.

 anni con un paio di mail minatorie farebbe incazzare anche un buddista)
Per carità ammetto che i miei toni polemici sono eccessivi ed anche pesanti,
dovuti al fatto che sono esausto dei PC di Internet e etc.
Quindi chiedo scusa al NG per i miei toni polemici.
Comunque che io non sappia di cosa parlo....... mah!!!!!!! Sicuramente non
sono un genio anzi, sicuramente prima di cominciare a lavorare con Java non
sono andato a vedere i bug di Java ritenedo che se ci fossero (visto che
tutti lo decantavano come piattaforma stabile etc.) li avrei incontrati in
casi rari e complessi non in un double.
Che la mia polemica non sia costruttiva, puodarsi, ma vedo che sono in tanti
ad avere questo problema o se ne sono occupati solo ora.
Sono d'accordo con te che i NG dovrebbero essere il più costruttivo
possibile, e ho sempre evitato di intervenire se non potevo offrire aiuto
(se vuoi posso postarti i ringraziamenti di molti che non riuscivano a
capire bene i model del JTable e ai quali ho praticamente fatto un corso)e
continuo a ringraziare quelli che me ne hanno dato (tanti e tutti
gentilissimi).
Che il mio post sia minatorio e che distrugga anni di propaganda in nome di
Java lo escludo, visto il numero di utenti che ogni giorno si affacciano a
questo linguaggio.
Ma sicuramente aiutano a non prendere per oro colato le voci su java come
linguaggio di Dio che non crea problemi, le stesse voci che dicono male di
Microsoft (della quale NON sono un fan perchè sta ammazzando l'informatica
ed ha insegnato a tutti i produttori di HW e SW a sviluppare e a far fare il
beta testing agli utenti).
Giustamente tu difendi Java (non penso solo perché lavori alla SUN) così
come io difendo Assembler e C perchè li amo decisamente di più.
Cmq, se il mio post di sfogo dopo una giornata di lavora persa per un
problema che non dovrebbe esistere, ti ha offeso, chiedo scusa.
Non sono un presuntuoso e/o non mi piacciono le risse da NG che vedo in
altri NG.
Cercherò di essere meno aggressivo nei confronti di Java qualora dovessi
perdere ulteriori giornate per simili questioni, chiedendovi notizie, prima
di sbottare.
Ma a questo punto voglio chiederti una cosa: perché quando i newbie si
affacciano e chiedo pregi e difetti dei vari linguaggi (vedi i tanti post
tipo : è meglio questo linguaggio o quello) tutti tralasciano problematiche
tipo queste ? Tipicamente sento dire : il C++ è un casino perchè usa i
puntatori, ma nessuno dice : Java è lento come un trattore e succhia RAM
come un disgraziato.
Non trovi che sia inutele vinirmi a dire :
(per chi conosca il noto e annoso"misunderstanding" di chi comincia ora con
Java e la virgola mobile) che tu non sappia di cosa scrivi e da come lo
scrivi che usi un tono sgradevole...........
Di certo io non posso conoscere i bug di Java. Studio sui libri e questi
certe cose non le riportano.
Ovvio che tu non hai l'obbligo di dirmi cose simili, ma trovo abbastanza
strano che dopo tanti anni la SUN abbia fatto altre versioni di java ma non
abbia mai risolto tali questioni.

 abbia mai risolto tali questioni.
E' tutto ok, ma ti manca ancora un pezzetto di informazione: NON E' UN BUG.
Per il resto, qui lavoriamo tutti (vabbe', qualcuno no) e ognuno ha i suoi
problemi... no prob
ciao


Ciao Ugo, sono confuso.
Il NON BUG è relativo alla classe BigDecimal e al tipo di dato elementare
double?

 double?
A meno che non mi sia perso qualcosa, non ho visto bug, ne' in BigDecimal, ne'
in double.
Funzionano correttamente, anche se concordo che si possano facilmente prendere
cantonate (le abbiamo prese credo tutti all'inizio).


mai evidenziato tali bug.
Non sei un'espressione?!?!
Ma allora sei un formulone !  :)))))))
cmq anche io credo che sia strano un bug di tali dimensioni
Ciao

 ...e a scrivere documentazione per un linguaggio di programmazione.. :)
Amen!
-- Giuseppe

 cantonate (le abbiamo prese credo tutti all'inizio).
Ugo, spero che tu stia scherzando. Se il mio professore di matematica
vedesse cose tipo :
        0 - 45.19 - 4.80 = - 49.989999999999995
mi rimanderebbe in prima elementare.
Se guardi il mio post iniziale c'č un piccolo codice che mostra proprio
questo errore.
Premetto che sto utilizzando in questo caso i tipi di dati elementari
(double) e non gli oggetti (Double).
Secondo te č normale che :
Caso 1 :
    BigDecimal ris = new BigDecimal(44.16);    // Passato come double
    ris.toString() ---->>>>
"44.159999999999996589394868351519107818603515625"  // Assurdo
Caso 2 :
    BigDecimal ris = new BigDecimal("44.16");  // Passato come stringa
    ris.toString() ---->>>> "44.16                      // Corretto
Questi sono errori belli pesanti, soprattutto per chi la vora con i
decimali, vedi me che lavoro con gli Euro o con chi fa la matematica.

 Ma allora sei un formulone !  :)))))))
No sono sicuramente uno ignorante che voleva scrivere espertone, ma che
soffre di idee confuse alla ennesima potenza.
CORREZIONE.
Mi sono accorto ora che il correttore automatico, converte espertone in
espressione, quindi sono giustificato.

 prendere cantonate (le abbiamo prese credo tutti all'inizio).
Tra parentesi, un vecchio trick of the trade per chiunque faccia
applicazioni con reali (cosa che in Italia non si e' abituati a fare,
vista l'aritmetica sulle lire) e' quello di non usare mai (ne' in Java,
ne' in C, ne' in PincoPallo) == per confrontare valori reali, ma usare un
confronto "a meno di un epsilon": invece di (in Java) if (double1 ==
double2) ... usare qualcosa tipo if (Math.abs(double2-double1) < epsilon)
... oppure un equivalente se esiste nella libreria standard del
linguaggio. 
Costa un filo di piu' computazionalmente parlando - ma vi garantisce
molte meno notti insonni. ;-) 


questo errore.
non e' un errore
hai letto qualcosa a riguardo dei numeri in virgola mobile?
ciao_O
_______________________________________
http://jame.sourceforge.net
 
[ last release jame4.2e ]
_______________________________________
http://digilander.iol.it/schiele

        0 - 45.19 - 4.80 = - 49.989999999999995
In matematica i numeri sono infiniti, in informatica finiti (per ovvi
motivi).

 hai letto qualcosa a riguardo dei numeri in virgola mobile?
A casa mia (2+2) fa 4 e (0 - 45.19 - 4.80 ) fa -49.99
Il resto sono cavolate o vogliamo riscrivere i libri di matematica?

 
http://java.sun.com/products/jdk/rmi/archives/6936.html


 che quindi *tende* a 0.1
Sempre più assurdo.
Io volevo solo una sottrazione tra due numeri in virgola.
A questo punto ritengo molto più intelligente la vecchia soluzione che si
adottava nei vecchi programmi per simulare i calcoli in virgola utilizzando
gli interi.
Devo solo sottrarre due numeri non voglio lo standard OSI o le regole per un
buon raytracing.
Su argomenti come : i migliori calcoli per l'interpretazione dei file MP3 o
la decodifica si segnali audio video, etc. li si può entrare nel campo
dell'ipotesi, ma su una sottrazione non la accetto.
Scusami ma trovo assurdo e ridicolo trattare i numeri a quella maniera
sapendo di introdurre forti errori.
Se non è un bug è qualcosa di molto peggio non trovi?
E' come se andando a frenare un'auto decida di pinzare solo 3 minuti dopo lo
schianto, perché lo standard prevede un certo tempi di ritardo etc.....
Non so se ricordi lo scandalo dei Pentium 90 che sbagliavano la quinta cifra
decimale.
Questo mi fa pensare a come sono cambiati i tempi, oggi giustifichiamo il
fatto che i PC non sappiano neanche più fare una sottrazione.
Cmq. grazie per la risposta, non la condivido ma la accetto.

 Cmq. grazie per la risposta, non la condivido ma la accetto.
madonna ma sei la polemica fatta uomo? che cazzo. Se non ti va bene 
prendi un foglietto di carta dove puoi scrivere anche il simbolo di 
infinito e il concetto di limite (che in matematica è definito 
benissimo)..... sul pc queste cose non le avrai mai. A meno di ricorrere 
a trucchetti vari.
Kali



per favore leggi su un libro come funziona il formato 
in virgola mobile prima di insistere ulteriormente


> madonna ma sei la polemica fatta uomo? che cazzo.
Sicuramente sono polemico ed autocritico e non ho nessun problema ad
ammetterlo, ma se ritenete superfluo un problema del genere, mah non so più
che dire.
Preferisco finire qui l'argomento. Tutto voglio tranne che inemicarmi il NG.
Voglio solo farti notare che io ho chiesto scusa per atteggiamenti polemici,
e non ho usato toni offensivi con nessuno. Sarò polemico ma sicuramente non
sono sgarbato.

Andrea (scusa se ti do del tu), come ho risposto ad altri, chiudo qui
l'argomento.
Non hoi nessuna voglia di inemicarmi il NG per simili baggianate.
Resto della mia idea, perché nessun libro puň dirmi come si fanno le
sottrazioni.
Cmq. l'importante č che ho risolto il mio problema anche se i tempi di
calcolo si sono decuplicati.
Ringrazio te e gli altri per le delucidazioni sulle CARATTERISTICHE di Java
e su alcuni trucchi per renderle idonee alle mie esigenze.
Cordiali saluti e buon Natale visto che quasi ci siamo.

 sono sgarbato.
?? perchè, sai per caso farmi un nome di qualcuno che ti ha offeso (se 
non per le tue scarse conoscenze dell'informatica...)??? il mio "e che 
cazzo" ti ha offeso?? scusami... non era mia intenzione, ma mi suona 
molto strano e fastidioso il tono con cui ti accanisci contro il Java....
Kali

calcolo si sono decuplicati.
a questo punto sarebbe bello se dicessi qual'e' la soluzione che hai adottato
ciao


 Sempre pi— assurdo.
Quindi ora, oltre a Sun, pure all'IEEE sarebbero assurdi? :)


 ha scritto nel messaggio
news:9vnnof$2rr8$1...@stargate1.inet.it...


 non per le tue scarse conoscenze dell'informatica...)???
Sai fino a un'anno fa ero felicissimo di lavorare con i PC.
Lavoricchiavo con C e Assembler e le cose erano molto semplici e la
matematica era l'unica certezza.
Fidati se ti dico che con un 286/8086 ho fatto di tutto: ho programmato la
maggior parte dell'HW di uno di quei vecchi PC, chatLine in tempo reale
usando le seriali con interfaccie a caratteri, mi sono fatto da solo
librerie grafiche per gestire areee di testo, menù a tendina etc..
Se le mie scarse conoscenze sono riferite al fatto che non so far fare una
sottrazione a Java e perchè non credo ad uno standard, hai ragione forse è
ora che riprendo carta e penna e smetto di lavorare con i PC.
Chiudo dicendo che per me l'argomento è chiuso e spero che lo farai anche tu
astenendoti dal rispondermi.
Continuerò ad usare comunque Java perché è facile da utilizzare e perché mi
da da mangiare, quindi il problema non sussiste.
Come ti ho già detto, inemicarmi il Ng non è il mio scopo, primo per una
forma di rispetto verso tutte quelle persone che mi hanno sempre aiutato
(vedi ad esempio Cristian Umili, Giovanni Martone, Fabrizio Camera, etc.)
secondo perché come detto da qualcuno il NG ha bisogno di cose costruttive e
non distruttive.
A questa persona ho chiesto scusa per il mio post distruttivo quindi spero
che sia tutto concluso qui.
Ciao e spero che in caso di necessità potrò contare anche sul tuo aiuto per
risolvere dei problemi (non sui numeri in virgola giuro :) ) o per avere
nozioni sui tanti argomenti che devo ancora studiare.
Se comunque vuoi rispondermi ti sarei grato di farlo privatamente mediante
la mia E-Mail santo...@NOSPAMciaoweb.it

Soluzione forse poco elegante ma sicuramente funzionante.
double totEuro = 0.0;
for(int idx=....................................)
{
......................................
.................
.......................................
}
//   ------- questa è la mia soluzione ------------   //
BigDecimal ris = new BigDecimal(""+totEuro);
ris=ris.setScale(2,ret.ROUND_UP);
String sTotEuro = ""+ris.toString();

il tasso di colesterolo di qualcuno ma Euro.
continui a non considerare come viene eseguita la sottrazione dalla cpu
(anche in assembler avresti lo stesso problema usando numeri floating point)
se il tuo problema e' ottenere un risultato con due cifre decimali
allora prova a fidarti di java, fai tutti i conti che vuoi con i double
e solo alla fine arrotonda il risultato a due cifre decimali e 
convertilo in stringa, vedrai che ottieni il risultato corretto


purtroppo mi pagano per lavorare in Java.
Anche a me mi pagavano per lavorare in Cobol, ma poi ho cambiato...
Sei tu che scegli il tuo lavoro, non il lavoro che sceglie te... in questo
periodo e in questo settore funziona così. Altrimenti sei un po' messo
male...
Fai presente la tua situazione nella tua società e fatti spostare su C#. Ad
ogni modo C# non è compilato.
Ci sono un sacco di programmatori che sarebbero più indicati per il VB o
Cobol. Anyway... spero che cambierai presto idee o che verrai destinato a
cose più affini ai tuoi gusti.
Aspettiamo le tue segnalazioni di bachi su C#, avrai di che divertirti.

 espressione, quindi sono giustificato.
Capita... con i prodotti MSFT... :)

Io di queste cose non me ne sono mai preoccupato, nonostante ho lavorato
anche in contesti dove questi problemi sono stati considerati e risolti con
approssimazioni più che controllate.
Non ricordo bene se sul TIJ c'è anche un discorso su queste cose. Ad ogni
modo, tu credi che Java faccia una sottrazione in modo diverso dal C o
dall'Assembler ?
Ma il fatto stesso che tu usi dei float o dei double (o va beh...
bigdecimal) implica già degli arrotondamenti. Double, saprai meglio di me
che è riferito alla "precisione doppia" ovvero un tot di numeri dopo la
virgola.
So per certo che gli stessi problemi li riscontreresti in qualsiasi altro
linguaggio di programmazione, perché il "difetto" sta nella rappresentazione
binaria dei numeri.
Poi... ti confido che non sei l'unico ad aver lavorato in Assembler o C
prima di Java, anzi penso che quì di queste persone se ne possono contare a
decine.
ciao e buon Natale.
Jigi

 Jigi
Ricambio gli auguri
RompiballeBob  :)