使用ilnumerics进行整数除法

时间:2014-02-16 16:45:52

标签: integer-division ilnumerics

我没想到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 个答案:

答案 0 :(得分:0)

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