void setup()
{
Serial.begin(115200);
}
void loop()
{
unsigned long teste = ((2023 * 1000000) + (12 * 10000));

Serial.print ("teste: ");
Serial.println (teste);
Serial.println ("certo: 2023120000");
Serial.println();

delay(5000);
}

O que estou fazendo de errado que o resultado está dando 2022988928?

Alguém pode me dar uma luz.

Desde já agradeço.

Exibições: 120

Responder esta

Respostas a este tópico

Boa noite...

unsigned long teste;

void setup(){
Serial.begin(115200);
}


void loop(){
teste = ((2023 * 1000000) + (12 * 10000));

Serial.print ("teste: ");
Serial.println (teste);
Serial.println ("certo: 2023120000");
Serial.println();

delay(5000);
}

Na verdade, pra mim, os 2 estão funcionando.

Arduino 1.8.10

Boa noite,

Em qual placa testou?

no meu os dois apresentam erro.

hummmm.... usei placa de teste com ESP12F, deixa eu ver onde ta meu arduino uno, quase não uso.

Vc usa qual ???

Testo em um uno.

Quando finalizo costumo colocar em um nano.

Pedi o novo Arduino Nano Every. Estou esperando chegar.

Nunca usei os ESP.

Vou testar direto no nano e em outro uno.

Posto já o resultado.

Engraçado que o programa principal esta com mais de 1000 linhas de código e funcionando.

Só esse calculo que está dando esse problema.

Bom dia CF,

testando com o nano, qual o resultado?

Testa este sketch também.

https://pastebin.com/audUixAg

RV

Funcionando também no ESP12F !!!

Faltou so abrir aqui hehehe:

teste = (((

mas tá funcionando.

FUNCIONOU.

unsigned long bb = ((unsigned long)12 * (unsigned long)10000);

Obrigado.

Infelizmente não achei meu UNO, faz anos que não uso, testei na placa de TESTE e no WEMOS, ambos com ESP12F, funcionando perfeitamente.

Mesmo colocando "teste" como Variável Global, apresenta o mesmo erro.

Já testei com 3 placas em micros diferente. O mesmo erro acontece.

Uno e Nano.

Olá.

  Acredito que o compilador esteja se perdendo pq vc está mandando fazer contas com inteiros.

  Para que os numeros que entram na conta sejam Long também vc precisa acumular em variáves Long, ex:

unsigned long teste = ((2023L * 1000000L) + (12L * 10000L));

Ref: https://www.arduino.cc/reference/pt/language/variables/data-types/l...

  O ESP suporta mais bits, tem um int de 32bits, por isso os intermediários cabem.

  Em long não, mas em float já preciei mto usar um 123.0 no lugar de 123 pra forçar o compilador a entender que o intermediário é float e não int.

Ref: https://github.com/espressif/arduino-esp32/issues/1745

Engraçado que se multiplicar por 50000 ou 100000 dá certo.

Só fica errado se multiplicar por 10000 neste caso.

RSS

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2020   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço