Как уже упоминалось в комментариях, обозначения являются правильными для научных обозначений. Если вы хотите, чтобы он печатался по-вашему, вам нужно будет создать для него специальную функцию, например:
void PrintScientific(long double d) {
int e = 0;
if(d < 1 && d > -1) {
for(e = 0; d*10 < 10 && d*10 > -10; e--) {
d *= 10;
}
} else {
for(e = 0; d/10 > 1 || d/10 < -1; e++) {
d /= 10;
}
}
std::cout << std::setprecision(4) << std::fixed << d << "*10^" << e;
}
Это может быть не совсем то, что вам нужно, но вам следует начать.