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