Ho trascorso parte di ieri e oggi rintracciando un bug in qualche codice Matlab. Avevo pensato che il mio problema fosse l'indicizzazione (con molte strutture che non ho definito e mi sto ancora abituando), ma si è rivelato un bug di overflow. Ho perso questo per un motivo ben preciso:Come riconoscere i bug di overflow in Matlab?
>> uint8(2) - uint8(1)
ans =
1
>> uint8(2) - uint8(2)
ans =
0
>> uint8(2) - uint8(3)
ans =
0
mi sarei aspettato l'ultimo ad essere qualcosa di simile a -1
(o 255
). Nel mezzo di un grande vettore, gli errati 0
s erano difficili da rilevare, ma uno 255
si sarebbe distinto facilmente.
Eventuali suggerimenti su come rilevare facilmente questi problemi in futuro? (Idealmente, mi piacerebbe disattivare il controllo di overflow per farlo funzionare come C.) Cambiare in double
funziona, ovviamente, ma se non mi rendo conto che è un uint8
per cominciare, che non aiuta.
Dove prendi questi numeri da? Se li carichi dal file, puoi semplicemente aggiungere una riga al caricatore per restituire tutto come uint8 o doppio. Oltre a leggere i file, non dovresti aspettarti gli uint8 in Matlab. – Jonas
In realtà non so esattamente da dove vengano. Sto integrando il codice di qualcun altro, quindi non conosco i dettagli. –