Pergunta

Eu preciso especificar o tamanho exato de um string a ser impresso a partir de um valor duplo, mas eu não quero para restringir a saída mais do que é necessário.

O que é o comprimento máximo que uma precisão de 6 dígitos dupla terá quando formatado por printf ()?

Especificamente, qual o valor que eu deveria dar a X de printf("%X.6lg",doubleValue); para garantir que nenhum valor é truncado?

A razão que eu preciso para ser específico sobre o comprimento é que eu estou definindo um MPI derivada tipo de dados composta de muitas representações de seqüência de valores duplas e deve saber o seu comprimento exato, a fim de regiões divida do arquivo entre processos MPI .

Espero que isso está claro. Agradecemos antecipadamente por responder.

Foi útil?

Solução

printf("%.6g", doubleValue) uso ou printf("%.6Lg", doubleValue)
Note que deixando de fora os dígitos principais (a "largura") no especificador de precisão não faz exigências sobre o comprimento da parte integrante do valor.
Observe também que a undercase "l" vai especificar que o valor é um long int. As maiúsculas "L" especifica um valor de dupla longa.
Também nota que, se você não quer que isso seja potencialmente alterado para notação científica (se for uma representação mais curta), então você usaria "f" em vez de "g".
ver um printf referência aqui .

Outras dicas

O expoente máximo de uma IEEE duplo é 1023, então maior dupla será 1 + 1/2 + 1/4 + 1/8 + ... etc * 2 ^ 1023. Que será de cerca de 318 caracteres, em notação decimal.

Por que não usar o "e" especificador de formato?

contendo muitos valores úteis, entre eles DECIMAL_DIG, que é para um long double no entanto.

O mesmo arquivo provavelmente irá dizer-lhe que um duplo em sua plataforma tem mais de 6 dígitos de precisão ...

PS: Observe também a resposta de Demi acima. Ele aponta várias falhas em seu printf () que me escapou.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top