我没想到1的结果:
ILArray<int> test = ILMath.ones<int>(20, 20);
test = test / 2;
我以为结果会是0。如果 ILNumerics 使用英特尔 IPP 库,那么我相信 1 是 IPP 库为整数除法返回的结果。如果这是设计使然,那么我想我最好的选择是使用类似这样的方法来获得整数除法结果:
test = toint32(tosingle(test) / 2.0f);
任何意见?问题?RTFM 指针?埃里克
我没想到1的结果:
ILArray<int> test = ILMath.ones<int>(20, 20);
test = test / 2;
我以为结果会是0。如果 ILNumerics 使用英特尔 IPP 库,那么我相信 1 是 IPP 库为整数除法返回的结果。如果这是设计使然,那么我想我最好的选择是使用类似这样的方法来获得整数除法结果:
test = toint32(tosingle(test) / 2.0f);
任何意见?问题?RTFM 指针?埃里克
ILNumerics 坚持与 Matlab(显然是 IPP?)相同的整数除法约定:它不会截断结果的小数部分,而是将其四舍五入(在中点远离零)并在数据类型边界处使其饱和。
就个人而言,我对此不太满意——它源于早期的兼容性愿望。虽然饱和度很好并且符合直觉,但舍入显然与 .NET(和所有主要通用语言)通过简单地截断小数部分来处理整数除法的方式相冲突。您可以在这里投票改变行为:http: //ilnumerics.net/mantis/view.php ?id=188
为了获得“C/.NET-Convention”结果,您可以使用该ILMath.apply
函数作为替代:
ILArray<int> a = 1, b = 2;
ILArray<int> c = a / b; //gives 1
c = ILMath.apply((_a,_b) => _a / _b, a, b); // gives 0