C语言入门,请教关于浮点数的问题

比如这一段代码

#include<stdio.h>
int main()
{
    float a;
    float b;
    a=123456.789e5;//12345678900 
    b=a+20;//1234567820
    printf("%f",b);//单精点只接受7位有效数字

    return 0;
}
//输出结果 为 12345678848.000000

按理说a只能有7位那取值应该是123456700000, 输出应该是12345600020,但是好像也不对
但是为什么程序输出是12345678848.000000呢?求解答,纯自学,见谅,多谢多谢.

img

img

你类型设置为double就正常了。数据溢出