Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Per rispondere alle tue domande bisogna che tu conosca almeno un po' la rappresentazione dei numeri che si usa solitamente nei calcolatori.
Per tutti i tipi interi, anche di diverse dimensioni, si usa la rappresentazione in complemento 2.
La prima cosa che devi sapere è che, per facilitare la vita al programmatore, molti linguaggi permettono il confronto tra tipi di interi diversi.
Quello che succede quando confronti uno short (16 bit) con un byte (8 bit) è che il byte viene convertito temporaneamente a un short e in seguito viene operato il confronto.
Si chiama cast implicito, in questo caso è un upcast perché vai verso una dimensione superiore. Questo si applica anche a operazioni aritmetiche (ad esempio somme tra tipi diversi).
Esiste anche il downcast, che si ha quando converti un tipo a dimensione superiore a uno di dimensione inferiore, e qui bisogna stare un po' attenti perché potrebbe esserci una perdita di bit significativi.
Il motivo per cui il primo confronto fallisce quindi non è per la dimensione diversa dei tipi (prova con byte x = 1 e short y = 1) ma per la rappresentazione in complemento 2 del byte. Ti consiglio di stampare i tuoi valori di x e y e ragionare su questa cosa, dovresti arrivarci da solo.
Il caso del confronto tra intero e double è ancora diverso, perché i floating point vengono rappresentati in un modo completamente diverso. Ogni linguaggio ha le sue regole per il casting e non ricordo molto bene il java, però di solito x viene convertito a double per effettuare quel confronto.
Se si riesce a mantenere una certa precisione nel cast, il confronto funziona. Di solito però non si fa mai un confronto diretto tra double o float con ==, nemmeno quando non ci sono cast: considera questo codice
Prova ad eseguirlo e vedrai che risulta falso, perché 1/3 non viene rappresentato con precisione sufficiente per poter tornare uguale a 1 con la moltiplicazione.
Quindi di solito si controlla che il valore assoluto della loro differenza sia più piccolo di una certa soglia
Grazie per aver risposto, sul secondo credo di aver capito qual'è il problema. Per il primo mi devo impegnare di più però mi hai dato l'input su cui partire...grazieee