Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C fmod的有效替代方案(x,2)_C_Math - Fatal编程技术网

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。虽然不确定这是否是一个问题,但我必须说我发现这是一个复杂的解决方案,而且格式使它更加可怕谢谢我认为它仍然有效,但它肯定不是我想要的。现在更新。