super errore incompressibile con pow(base,esponente)

provate anche voi magari è il mio arduino che è partito o sono io che non capisco la logica. codice che ho usato

  int b=0;
  int f=0;
  void setup() {
    Serial.begin(9600);
  }
  void loop() {
    b=pow(10,f);
    f=f+1;
    Serial.println(b);
    delay(2000);
  }

pensando con un po di logica di come dovrebbe andare il programma B a ogni ciclo dovrebbe essere uguale a 10 elevato a f. dato che f a ogni ciclo aumenta di uno teoricamente b è uguale a: 0 10 100 1000 ecc.. non è così?? quando vado sul serial monito mi stampa tutt'altro 1 10 99 999 9999 dove sbaglio?

ilmandorlone: quando vado sul serial monito mi stampa tutt'altro 1

10 elevato a 0 mi "sembra" dia 1 come risultato ; almeno la mia calcolatrice lo conferma

per il resto non so' Hai provato a mettere b come unsigned ?

Powe lavora su dati di tipo FLOAT, quindi gli arrotondamenti portano a valori a volte incomprensibili.

http://arduino.cc/en/Reference/Pow

10 elevato a 0 mi "sembra" dia 1 come risultato ; almeno la mia calcolatrice lo conferma

si scusa hai ragiona ma la mia calcolatrice dice che 10 alla 2 fa 100 no 99

Hai provato a mettere b come unsigned ?

cosa intendi ?

grazie @leo72 già meglio ora restituisce

1 1.00 10.00 100.00 1000.00 10000.00 99999.98 999999.68 9999984.00 99999968.00 999999616.00 0.00 0.00 0.00 0.00

Un microcontrollore non ha una ALU per cui le funzioni matematiche sono realizzate in software: di base il micro supporta nativamente (in hardware) solo addizioni, sottrazioni e moltiplicazioni. Le altre operazioni sono implementate in software, la potenza è una di queste.

ilmandorlone:

Hai provato a mettere b come unsigned ?

cosa intendi ?

Non sona andato a vedere pow ma sospettavo cio' che Leo ha scritto L'unsigned era un modo per non prendere in considerazione valori negativi ... ma se e' float ...

Mi sa' che ti conviene fare un for con f come indice e ripeterlo al posto del pow

leo72: moltiplicazioni. Le altre operazioni sono implementate in software, la potenza è una di queste.

Certo che pow e' implementata male In definiva dietro alla funzione pow mascheri un ciclo for e fai delle semplici moltiplicazioni che si spera siano giuste :) for o un meccanismo equivalente che faccia 10*10*10.... in base all'esponente

altrimenti lascio che a f a ogni ciclo si moltiplica per 10 f=1 void loop() { f=f*10 }

non mi ispira più di tanto ma mi accontento :/