fmod(x,2)的有效替代方案

时间:2013-04-08 15:02:19

标签: c math

是否有更有效的方式:

f = fmod(x+1, 2)

确定值是否均匀?

e.g。

对于f = 1

的所有偶数值,

x 对于f = 0

的所有奇数值,

x

我只需要这个就可以用于正整数集(我的x数据类型是int

3 个答案:

答案 0 :(得分:5)

为什么使用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;

因为必须清除最低有效位才能使整数为偶数。不过,可以说这不太清楚。

答案 1 :(得分:4)

假设正整数

f = 1 - (x&1);

应该适合你。

答案 2 :(得分:1)

你可以直接转换为int,我想......

f = (int)x % 2;