Как использовать оператор% для значений с плавающей запятой в c - PullRequest
11 голосов
/ 21 сентября 2011

Когда я использую оператор% для значений с плавающей запятой, я получаю сообщение об ошибке, в котором говорится, что «недопустимые операнды для двоичного% (имеют« float »и« double »)». в диапазоне типа int) поэтому, чтобы избежать неудобств, я использую float. Есть ли способ использовать оператор% для таких больших целых значений ????

Ответы [ 6 ]

17 голосов
/ 21 сентября 2011

Вы можете использовать функцию fmod из стандартной математической библиотеки. Его прототип находится в стандартном заголовке <math.h>.

6 голосов
/ 21 сентября 2011

Возможно, вам лучше использовать long long, который имеет большую точность, чем double в большинстве систем.

Примечание. Если ваши номера больше, чем может удержать long long, то fmod, вероятно, не будет вести себя так, как вы этого хотите. В этом случае вам лучше всего использовать библиотеку bigint, например this .

5 голосов
/ 21 сентября 2011

Оператор % определен только для операндов целочисленного типа; вам нужно использовать библиотечные функции 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);  
0 голосов
/ 14 ноября 2017

Когда у меня не было легкого доступа к 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;
}
0 голосов
/ 24 сентября 2011

Если вы хотите использовать int long long, не используйте формат, который не идеален для вашей проблемы, если существует лучший формат.

0 голосов
/ 21 сентября 2011

учтите: int 32-битный и long long int из 64-битных

Да, оператор% (по модулю) не работает с числами с плавающей запятой и с двойными ... если вы хотите выполнить операцию по модулю с большим числомможете проверить long long int(64bits), может ли это вам помочь.

все еще с диапазоном больше 64 бит, тогда в этом случае вам нужно сохранить данные в .. строку и выполнить операцию по модулю алгоритмически.

или вы можете перейти на любой язык сценариев, как python

...