Estes parecem ser 5 perguntas em vez de um.De qualquer maneira:
std::fixed
é usado para indicar que deseja sempre ter um ponto fixo de formato, em vez de usar a notação científica, onde esta notação é mais apropriado.Quando há muitos dígitos necessários para representar o valor razoavelmente, o formato vai mudar usarx.yyyyyyEee
(você pode pedir para usar sempre usando o formato científicostd::scientific
).std::setw()
não importa o que o valor é formatado!Quando um valor é formatado e há um positivoout.width()
definido, a saída vai ser preenchido comout.fill()
personagem para ser pelo menosout.width()
caracteres de largura.Se o resultado for maior do queout.width()
de qualquer maneira, nenhum preenchimento ocorrerá.Depois de cada operação de saída [que levaout.width()
em conta] oout.width()
é redefinido para0
(todas as outras opções de formatação não são automaticamente repostos).- Qualquer caractere conta para a largura, incluindo o sinal, os separadores de milhar, pontos decimais, etc.O ponto decimal não contam para a precisão:
out.precision()
é o número de dígitos fracionários (parastd::fixed
formatação) ou o número de não-expoente dígitos (porstd::scientific
formatação). - A largura é de quantos caracteres serão preenchidas pelos saída, a precisão especifica quantas [fracionário] dígitos são produzidos.
- Binário valores de ponto flutuante pode representar muito poucos dígitos decimais (por
float
é normalmente 6;você pode descobrir quantos dígitos podem ser utilizados com segurança usandostd::numeric_limits<float>::digits10
).Tentando usar mais dígitos do que o que provavelmente resultará em resultados inesperados quando o processamento de valores decimais (quando o processamento de valores binários, você pode estar interessado emstd:numeric_limits<float>::digits
lugares).Você pode querer ter um olhar para O Que Todo Cientista Da Computação Deveria Saber Sobre Aritmética De Ponto Flutuante.