2011-09-21 68 views
7

Cuando uso% operator en valores float obtengo un error que indica que "operandos inválidos a% binario (tienen 'float' y 'double')". Quiero ingresar los enteros solo valor, pero los números son muy grandes (no están en el rango de tipo int) así que para evitar el inconveniente utilizo float. ¿Hay alguna forma de usar% operator en valores enteros tan grandes ????Cómo usar el operador% para valores float en c

+0

Así 1,5% 1,1 = 0,4? – StuartLC

+0

sí división de módulo a = b% c; no funcionaría, porque no puede obtener un resto dividiendo un decimal por un decimal. –

Respuesta

11

Puede usar la función fmod de la biblioteca matemática estándar. Su prototipo está en el encabezado estándar <math.h>.

+2

+1 ... pero un enlace a [fmod] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/fmod.html) hubiera sido agradable :) – pmg

+1

@pmg: No es por eso que están autorizados a editar las publicaciones de otras personas? :) –

+0

@ssg: definitivamente! – cyco130

5

Probablemente sea mejor que use long long, que tiene una precisión mayor que double en la mayoría de los sistemas.

Nota: Si sus números son más grandes que long long puede contener, entonces fmod probablemente no se comportará de la manera que desee. En ese caso, la mejor opción es una biblioteca bigint, como this one.

+0

BigIntegerLibrary no se acepta en c ??? Además, ¿cuál es el% especificador para entero grande ??? –

+0

Lo siento, la biblioteca que sugerí es C++. –

0

consideran: int de 32 bits y largo long int de 64 bits

Sí,% (módulo) del operador no es el trabajo con los flotadores y doble .. si usted quiere hacer la operación de módulo en gran número se puede cheque long long int(64bits) podría esto ayudarlo.

aún el rango más de 64 bits, entonces en ese caso necesita almacenar los datos en ... cadena y hacer el funcionamiento del módulo de forma algorítmica.

o bien se puede ir a cualquier lenguaje de programación como Python

4

El operador % sólo está definido para operandos de tipo entero; que necesita para utilizar las funciones de biblioteca fmod* para este tipo de punto flotante:

#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

Si desea utilizar un uso int largo tiempo, no utilice un formato que no es ideal para su problema si una mejor formato existe.

0

Cuando no he tenido fácil acceso a fmod u otras bibliotecas (por ejemplo, haciendo un boceto Arduino rápida), considero que los siguientes funciona bastante bien:

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; 
} 
Cuestiones relacionadas