我正在为MATLAB/Octave中的一些VHDL代码开发一个验证工具.因此,我需要生成"真正"溢出的数据类型:
intmax('int32') + 1
ans = -2147483648
Run Code Online (Sandbox Code Playgroud)
稍后,如果我可以定义变量的位宽,那将会很有帮助,但现在这不是那么重要.
当我构建一个类似C的例子时,变量增加直到它小于零,它会永远旋转:
test = int32(2^30);
while (test > 0)
test = test + int32(1);
end
Run Code Online (Sandbox Code Playgroud)
我尝试的另一种方法是自定义"溢出" - 例程,每次更改数字后都会调用它.这种方法非常缓慢,不实用,根本不适用于所有情况.有什么建议?
Matlab R2016b带有一个怪物会杀死我们所有人:操作员隐式扩展.
基本上如果你有一个矩阵A和一个向量B,你现在可以做A + B(没有bsxfun或repmat).听起来不错吧?
但是,如果您提供列向量和行向量,它也可以工作!!
例:
a = 1:4 % row vector
b = (1:4)' % column vector
% before R2016b:
a + b
Matrix dimensions must agree.
% after R2016b:
a + b
ans =
2 3 4 5
3 4 5 6
4 5 6 7
5 6 7 8
Run Code Online (Sandbox Code Playgroud)
扩展两个向量并给出一个矩阵作为结果!! 这非常糟糕,因为您可能在没有注意到的情况下进行了完全不需要的操作.
所以我的问题是:是否有一种方法可以禁用隐式扩展并回复Matrix dimensions must agree错误?