Resultados equivocados en operaciones

Deberia dar el mismo resultado, ustedes con su experiencia podrian decirme porque de este error, esta es la salida del programa

108000
-23072
108000
-23072
108000
-23072
108000
-23072
108000

-23072
108000
-23072
108000
-23072

Código

long  StepValue1 = ((36000 * 6 ) / 360)  * 180 ;
long  StepValue2 = (100 * 6 )  * 180 ;

void setup(){
 Serial.begin(115200); 
}
void loop(){
    
    Serial.print(StepValue1);
    Serial.print('\n');
    Serial.print(StepValue2);
    Serial.print('\n');
    delay(1000);     
}

Editado por Moderador según Normas

Porque, por defecto, los literales son tipo int (salvo valores que no "caben" en un int, obvio).

Ahora, 36000 es un literal tipo long (por exceder el rango int que es -32768 a 32767), entonces promueve todos los valores de la primer ecuación a ese tipo.

En cambio en la segunda son todos tipo int y el resultado queda truncado en un valor int aunque el destino sea tipo long.

Para obtener el resultado correcto tienes varias opciones, por ejemplo tipificar alguno de los términos

long StepValue2 = (long)(100 * 6 ) * 180 ;

O tipificar alguno de los literales

long StepValue2 = (100L * 6 ) * 180 ;

La "L" junto al número 100 indica al compilador que es un literal tipo long.

Más o menos es ese el por qué. :wink:

1 Like

Muchisimas gracias, se me fue la onda, es como hacer un cast en c#

Te agradezo mucho, me hacia mucho ruido porque a veces el servomotor daba las vueltas completas que yo le solicitabda y en otras no.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.