Mit aktueller Spannung rechnen?

Um dann mal auf dein ursprüngliches Problem zurück zu kommen:
Ich kann nur vermuten, dass du einen LM35 o. ä. als Sensor verwendest. Aus deinem Code geht das leider nicht hervor, und auch nicht, mit welcher Referenzspannung du misst.
Ich mache es so:

  analogReference(DEFAULT); // set analog reference voltage to VCC=5V

int getTemperatureTMP35(byte analogPin){ // returns temperature in tenth of centigrade, for TMP35 sensor
  long value; // intermediate results need to be long
  value = analogRead(analogPin); // take three readings and average
  value += analogRead(analogPin); 
  value += analogRead(analogPin); 
  value /= 3;
  value = (5000 * value) / 1024L;
  return(int)value;
}

5000 (mV) ist meine Versorgungsspannung, in deinem Fall also 3300, Ausgabe ist in milliGrad Celsius. Ich verwende keine floats auf Gründen der Geschwindigkeit und Codegröße, ist auch nicht nötig.
Ein LM35 hat eine Genauigkeit von 1 Grad bei Zimmertemperatur, der Spannungsregler ist deutlich genauer und sollte keinen Einfluss auf dein Ergebnis haben.
Wenn die Ausgangsspannung des Spannungsreglers bei mir im Batteriebetrieb unter 5 Volt sinkt, gehen die Messwerte in die Höhe.
Der Tip von michael_x ist in diesem Fall tatsächlich die Lösung, sieht bei mir so aus:

inline int getVcc(){ // Returns actual value of Vcc (in milliVolts), modified code copied from the forum
  const long InternalReferenceVoltage = 1100; // assume perfect 1.1V reference voltage, the absolute error does not matter much
  // REFS1 REFS0          --> 0 1, AVcc internal ref. -Selects AVcc external reference
  // MUX3 MUX2 MUX1 MUX0  --> 1110 1.1V (VBG)         -Selects channel 14, bandgap voltage, to measure
  ADMUX = _BV (REFS0) | _BV (MUX3) | _BV (MUX2) | _BV (MUX1);
  // Start a conversion  
  ADCSRA |= _BV( ADSC );
  // Wait for it to complete
  while((ADCSRA & _BV(ADSC)));
  // Scale the value
  int result = (((InternalReferenceVoltage * 1024L) / ADC) + 5L);
  return result;
}

result ersetzt dann die 5000 aus obiger Berechnung.