problema com pow()

Estou fazendo uns testes com um motor 360 graus, mas está me deixando louco um problema
O código que estou usando é o seguinte.

#include <Servo.h> 
 
Servo myservo;  
               
 
double pos = 0;    
char c_pos[3];
int count = 0;

void setup() 
{ 
  myservo.attach(9);  
  Serial.begin(9600);
  Serial.println("Inicializado");
} 
 
void loop() 
{ 
  int number;
  int algarismo;
  while (Serial.available())
    {
    char c = Serial.read();
    Serial.print("Lido ");
    Serial.println(c);
    if (c == '\n')
      {
      Serial.print(" Count ");
      Serial.print(count);        
      Serial.println("Contando ");
      for (int i = 0; i < count; i++)
        {
        Serial.print(" i ");
        Serial.print(i);        
        Serial.print(" Potencia ");
        Serial.print(pow(10, count - 1 - i)); 
        Serial.print(" Numero C ");
        algarismo = c_pos[i] - 48;
        Serial.print(algarismo);
        Serial.print(" Expon ");        
        int expon = count - i -1;    
        Serial.print(expon);
        number = (int)pow(10, expon);
        Serial.print(" number pow ");
        Serial.print(number);
        number = number * algarismo;
        pos = int(pos + number);
        Serial.print(" pos ");
        Serial.println(pos);
        }  
      Serial.println(" ");
      Serial.print("Posicao ");
      Serial.print(pos);
      Serial.println("---");      
      myservo.write(pos);
      count = 0;
      pos = 0;
      }
    else
      {
      c_pos[count] = c;
      count++;        
      }
    }
}

O resultado sempre que digito 100 é esse:

 Count 3Contando 
 i 0 Potencia 100.00 Numero C 1 Expon 2 number pow 99 pos 99.00
 i 1 Potencia 10.00 Numero C 0 Expon 1 number pow 10 pos 99.00
 i 2 Potencia 1.00 Numero C 0 Expon 0 number pow 1 pos 99.00
 
Posicao 99.00---

se eu digito 100, fica em 99 se eu digito 200 fica em 198.

Não encontro onde pode ser meu erro, estou a duas noites com isso, se puderem me dar uma ajuda, agradeço

experimenta usar double na variável count.

Pode ser um problema de precisão de variáveis.

Realmente há algo errado no casting do meu scretch.
Tive que declarar todas as variaveis como double
Bom, estou tentando encontrar o "porque" disso.