如何在c中使用%运算符表示浮点值

时间:2011-09-21 12:56:27

标签: c math

当我在浮点值上使用%运算符时,我得到错误,指出“二进制%的操作数无效(有'浮'和'双')”。我只想输入整数值,但数字非常大(不是在int类型的范围内)所以为了避免我使用float的不便。有没有办法在这么大的整数值上使用%运算符????

6 个答案:

答案 0 :(得分:17)

您可以使用标准数学库中的fmod函数。它的原型在标准标题<math.h>中。

答案 1 :(得分:6)

您最好使用long long,它在大多数系统中的精度高于double

注意:如果您的数字大于long long可以容纳的数字,则fmod可能不会按照您希望的方式运行。在这种情况下,您最好的选择是bigint库,例如this one

答案 2 :(得分:5)

%运算符仅定义为整数类型的操作数;您需要将fmod*库函数用于浮点类型:

#include <math.h>
double fmod(double x, double y);
float fmodf(float x, float y);
long double fmodl(long double x, long double y);  

答案 3 :(得分:0)

考虑:int 32位和64位长long int

是的,%(modulo)运算符不适用于浮点数和双精度数。如果你想对大数字进行模运算,你可以检查long long int(64bits)这可能对你有所帮助。

仍然是64位以上的范围,那么在这种情况下,您需要将数据存储在..字符串中并以算法方式进行模运算。

或者你可以使用任何脚本语言,如python

答案 4 :(得分:0)

如果你想长时间使用int,如果存在更好的格式,请不要使用对你的问题不理想的格式。

答案 5 :(得分:0)

当我无法轻松访问fmod或其他库(例如,快速执行Arduino草图)时,我发现以下效果非常好:

float someValue = 0.0;

// later...

// Since someValue = (someValue + 1) % 256 won't work for floats...
someValue += 1.0; // (or whatever increment you want to use)
while (someValue >= 256.0){
    someValue -= 256.0;
}