Spędziłem część wczorajszego i dzisiejszego dnia wyszukując błąd w jakimś kodzie Matlaba. Myślałem, że mój problem jest indeksowany (z wieloma strukturami, których nie zdefiniowałem i wciąż się do tego przyzwyczaiłem), ale okazało się, że to błąd przepełnienia. Brakowało mi tego za bardzo konkretnego powodu:Jak rozpoznać błędy przepełnienia w programie Matlab?
>> uint8(2) - uint8(1)
ans =
1
>> uint8(2) - uint8(2)
ans =
0
>> uint8(2) - uint8(3)
ans =
0
Liczyłam ostatni być coś -1
(lub 255
). W środku dużego wektora trudno było wykryć błędne, ale 255
łatwo by się wyróżniało.
Jakieś wskazówki, jak łatwo wykryć te problemy w przyszłości? (Idealnie, chciałbym wyłączyć sprawdzanie przepełnienia, aby działało jak C.) Zmiana na double
działa, oczywiście, ale jeśli nie zdaję sobie sprawy, że to jest uint8
na początek, to nie pomaga.
Skąd te numery z? Jeśli załadujesz je z pliku, możesz po prostu dodać linię do programu ładującego, aby albo zwrócić wszystko jako uint8, albo jako podwójne. Inaczej niż przez czytanie plików, nie powinieneś spodziewać się uint8 w Matlabie. – Jonas
Właściwie nie wiem dokładnie, skąd pochodzą. Integruje się z czyimś kodem, więc nie znam szczegółów. –