¿Por que se redondean los decimales sin ninguna instrucción para ello en C?

El propósito del programa es resolver la suma de una sucesión de fracciones del tipo "n/2^n" pero desde el valor 26 todas las respuestas son "2.0000" no se si es el lenguaje o si estoy haciendo algo mal, intente usar "double" pero el resultado era el mismo.

       #include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <wchar.h>
#include <locale.h>
int main(){
    int numb=0;
    float limite,suma=0,fraccion,potencia;
    setlocale(LC_ALL, "");
    printf("Este código resuelve la sumatoria de una sucesión de la forman");
    printf("---------------------------n/2^n---------------------------nn");
    while(1){
            
    printf("Coloca el valor de <n> n");
    scanf("%f",&limite);
    if(limite<=0)
    break;
     do{
        potencia=(float)pow(2,++numb);
        fraccion+=(numb/potencia);
    }while(numb<limite);

    printf(" la respuesta es  : %fnn",fraccion);
    system("pause");
    system("cls");
    numb=0;fraccion=0;

}
    
    return 0;

    }