C fmod的有效替代方案(x,2)
是否有更有效的方法来执行:C fmod的有效替代方案(x,2),c,math,C,Math,是否有更有效的方法来执行: f = fmod(x+1, 2) 确定某个值是否为偶数 e、 g 对于x的所有偶数值,f=1 对于x的所有奇数值,f=0 我只需要它来处理正整数集我的x数据类型是int为什么要对整数使用fmod 标准测试将是: const int f = (x + 1) % 2; /* Will be 1 if x is even, 0 if it's odd. */ 这将使用内置的整数模运算符%进行测试 在我看来,添加1有点令人困惑,我会这样做: const int f = (
f = fmod(x+1, 2)
确定某个值是否为偶数
e、 g
对于x的所有偶数值,f=1
对于x的所有奇数值,f=0
我只需要它来处理正整数集我的x数据类型是int为什么要对整数使用fmod
标准测试将是:
const int f = (x + 1) % 2; /* Will be 1 if x is even, 0 if it's odd. */
这将使用内置的整数模运算符%进行测试
在我看来,添加1有点令人困惑,我会这样做:
const int f = (x % 2) == 0;
用比特思维的人通常会将测试写成:
const int f = (x & 1) == 0;
因为最低有效位必须为空,整数才能为偶数。不过,这一点可以说不太清楚。我想,您可以直接转换为int
f = (int)x % 2;
假设正整数
f = 1 - (x&1);
应该适用于您。您可以将法向模运算符与int一起使用。我怀疑它在优化后是否更有效,但x&1也能工作。在使用gprof进行分析时,原始fmod似乎比x%2更快。我不知道-我正在阅读其他人的代码并试图改进它。您是否会感觉到这两个运算符之间的性能差异?整数的最低有效位不需要为偶数而清除。通常,应使用算术运算符(如%)对数值进行运算,使用位运算符(如&)对位进行运算。这避免了像这样的错误,即所有整数的位表示都是2的补码。另外,与x+1%2不同,x%2==0可避免溢出;与二进制减号相比,按位and绑定得不那么紧密,因此将其解析为f=1-x&1。虽然不确定这是否是一个问题,但我必须说我发现这是一个复杂的解决方案,而且格式使它更加可怕谢谢我认为它仍然有效,但它肯定不是我想要的。现在更新。