Я провел часть вчера и сегодня, выслеживая ошибку в некотором коде Matlab. Я думал, что моей проблемой является индексирование (со многими структурами, которые я не определил и до сих пор привыкаю), но это оказалось ошибкой переполнения. Я пропустил это по очень конкретной причине:
>> uint8(2) - uint8(1)
ans =
1
>> uint8(2) - uint8(2)
ans =
0
>> uint8(2) - uint8(3)
ans =
0
Я бы ожидал, что последний будет что-то вроде -1
(или 255
). В середине большого вектора ошибочные 0
были трудно обнаружить, но 255
легко выделялся бы.
Какие-нибудь советы о том, как легко обнаружить эти проблемы в будущем? (В идеале, я хотел бы отключить проверку переполнения, чтобы она работала как C.) Изменение на double
работает, конечно, но если я не понимаю, что для начала это uint8
, это не ' t help.