Problem while converting float

aarg:
Prove it. Make a sketch that duplicates the problem, but doesn’t use sleep mode or interrupts.

I totally understand your point and I spent a lot of time last night going through the datasheet and browsing online and I know that Serial comms use interrupts but I don’t understand how the interrupts in my code can interfere with Serial comms. Plus I have a similar code where I use the same sleep modes the same interrupts and also serial but I do not get the same problem. It is basically the code for ADC noise reduction.

#include <avr/sleep.h>

const float Vref = 5.1;

void setup() {
  
  ADMUX = 0b01000000; // Use AVcc as ref and A0 as input
   ADCSRA |= 1<<ADEN; //enable ADC
  ADCSRA |= 1<<ADIE; //Generate an interrupt at end of ADC conversion to wake up from sleep
  ADCSRA |= ((1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0));    //Prescaler at 128 so deviding 16Mhz by 128 we get a clock frequency of 125kHz
  sleep_enable();
  set_sleep_mode(SLEEP_MODE_ADC);
  sei();
  Serial.begin(9600);
}

void loop() 
{ // put your main code here, to run repeatedly:

 //float volts= (LowNoiseRead()+0.5)*Vref/1024.0;
 //Serial.println(volts,3);
Serial.println(LowNoiseRead());
 delay(1);
}

unsigned int LowNoiseRead()
{
  sleep_cpu();
  ADC;
  return(ADC);
  //delay(1);
}

ISR(ADC_vect)
{
  
}

However, I will try to do as you say. Recreate the problem in a sketch without interrupts or sleep modes. Thank you.