2010-11-27 6 views
5

tener cuatro VARs:¿Cómo hacer una verificación de tamaño correcta?

short mantissa, 
exponent, 
base; 
long double factor; 

¿Cómo se puedo comprobar cada uno de esos tres componentes para asegurar ese resultado se ajuste en el factor? ¿O tal vez dejar como responsabilidad del usuario asegurarse de que los datos proporcionados tengan sentido?

+0

Espera, ¿te refieres como en el sentido de que la magnitud puede ser representada, o realmente te importa la pérdida de precisión? – ybungalobill

Respuesta

2

Dado que el factor es un valor de coma flotante (long double), el resultado casi siempre encajará. No siempre será muy preciso cuando el número sea grande, pero nunca se desbordará a menos que el exponente sea más grande de lo que cabe en una mantisa long double (generalmente 11 bits, por lo general 2^11).

Si desea realizar una verificación cruda de precisión, calcule la respuesta y luego verifique si se encuentra dentro de un rango razonable como [10^20, 10^-20].

2

Básicamente no se puede hacer exactamente esto porque el formato de cómo long double almacena los datos no está especificado por el estándar. Sin embargo, puede aproximarse a lo que desea comparando con: numeric_limits<long double>::digits, numeric_limits<long double>::radix, numeric_limits<long double>::min_exponent y numeric_limits<long double>::max_exponent.

0

El encabezado float.h/cfloat da algunos máximos y mínimos, de los cuales se pueden derivar límites de bits, pero eso parece un poco incómodo; lo que yo haría personalmente es definir los límites en mantissa, exponent y base como constantes, explícitamente, para cada plataforma que admita, con una advertencia #pragma y comentarios para manejar plataformas que no reconoce.

Cuestiones relacionadas