Extraño redondeo en coma flotante (single)

13/12/2005 - 14:12 por Leonardo | Informe spam
En debug:
? string.Format("{0:g6} ",csng( 2.27477467e-5))
"2.27478e-05 "
? string.Format("{0:g6} ", 2.27477467e-5)
"2.27477e-05 "
? string.Format("{0:g6} ",cdbl( 2.27477467e-5))
"2.27477e-05 "

Estoy verificando la salida de un programa y compruebo un pequeño error de
preción. Los datos son de tipo single.

Profundizando en el error veo que el error no aplica si convierto a double.

Preguntas similare

Leer las respuestas

#1 Harvey Triana
13/12/2005 - 15:48 | Informe spam
Leonardo-

No existe en la informatica -ni antigua ni moderna- un tipo que almacene un
número real. Solo tenemos tipos de datos que se aproximan bastante bien para
resolver problemas de la vida real. Entre más bytes ocupe el tipo, mejor es
la precisión. - Si tienes alma de cientifico, busca en la red literatura
sobre los problemas de punto flotante -

Saludes,
Harvey Triana.

"Leonardo" escribió en el mensaje
news:
En debug:
? string.Format("{0:g6} ",csng( 2.27477467e-5))
"2.27478e-05 "
? string.Format("{0:g6} ", 2.27477467e-5)
"2.27477e-05 "
? string.Format("{0:g6} ",cdbl( 2.27477467e-5))
"2.27477e-05 "

Estoy verificando la salida de un programa y compruebo un pequeño error de
preción. Los datos son de tipo single.

Profundizando en el error veo que el error no aplica si convierto a
double.

Respuesta Responder a este mensaje
#2 aydai
13/12/2005 - 16:52 | Informe spam
Usa el tipo decimal que es mas exacto.
"Leonardo" escribió en el mensaje
news:
En debug:
? string.Format("{0:g6} ",csng( 2.27477467e-5))
"2.27478e-05 "
? string.Format("{0:g6} ", 2.27477467e-5)
"2.27477e-05 "
? string.Format("{0:g6} ",cdbl( 2.27477467e-5))
"2.27477e-05 "

Estoy verificando la salida de un programa y compruebo un pequeño error de
preción. Los datos son de tipo single.

Profundizando en el error veo que el error no aplica si convierto a
double.

Respuesta Responder a este mensaje
#3 Leonardo
14/12/2005 - 17:04 | Informe spam
No es un problema de precisión sino de correcta aplicación del redondeo:

Si tengo un dato con preción de 10 dígitos y en un informe he de
presentar 4 porque no necesito más precision,
no debo por ello dar un dato incorrecto, observa que el último dígito
(8) para tipo de dato single está incorrectamente
redondeado, debería ser 7. En general se considera redondeo correcto el
que menos error introduce.

Lo curioso es que este error se me ha presentado en poquísimos casos en
la verificación del programa que estoy tratando
por lo que no entiendo que tipo de algoritmo utiliza Net que falla de
forma tan aleatoria (en apariencia).

"" escribió en el mensaje
news:eF54%230$$
Usa el tipo decimal que es mas exacto.
"Leonardo" escribió en el mensaje
news:
En debug:
? string.Format("{0:g6} ",csng( 2.27477467e-5))
"2.27478e-05 "
? string.Format("{0:g6} ", 2.27477467e-5)
"2.27477e-05 "
? string.Format("{0:g6} ",cdbl( 2.27477467e-5))
"2.27477e-05 "

Estoy verificando la salida de un programa y compruebo un pequeño error
de preción. Los datos son de tipo single.

Profundizando en el error veo que el error no aplica si convierto a
double.





email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida