使用 ilnumerics 进行整数除法

Posted

技术标签:

【中文标题】使用 ilnumerics 进行整数除法【英文标题】:integer division using ilnumerics 【发布时间】:2014-02-16 16:45:51 【问题描述】:

我没想到结果是 1:

ILArray<int> test = ILMath.ones<int>(20, 20);
test = test / 2;

我以为结果会是 0。如果 ILNumerics 使用英特尔 IPP 库,那么我相信 1 是 IPP 库为整数除法返回的结果。如果这是设计使然,那么我想我最好的选择是使用类似这样的方法来获得整数除法结果:

test = toint32(tosingle(test) / 2.0f);

有没有cmets?问题? RTFM 指针? 埃里克

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于使用 ilnumerics 进行整数除法的主要内容,如果未能解决你的问题,请参考以下文章

用 random.randint 进行整数除法

ILNumerics 等效于 MatLab/Octave 语句

如何在javascript中进行整数除法(在int中获取除法答案而不是float)? [复制]

试图使用浮点数在C中对整数进行除法

PostgreSQL除法保留小数

SSE整数除法?