Я потратил часть вчерашнего дня и сегодня отслеживал ошибку в коде 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.