Pregunta

límites limits.h especifica para no flotante tipos de matemáticas de punto, por ejemplo, INT_MIN y INT_MAX. Estos valores son la mayoría de los valores positivos más negativa y que se puede representar mediante un int.

En float.h, hay definiciones para FLT_MIN y FLT_MAX. Si lo hace lo siguiente:

NSLog(@"%f %f", FLT_MIN, FLT_MAX);

Se obtiene el siguiente resultado:

FLT_MIN = 0.000000, FLT_MAX = 340282346638528859811704183484516925440.000000

FLT_MAX es igual a un número muy grande, como era de esperar, pero ¿por qué no es igual a cero FLT_MIN en lugar de un número negativo muy grande?

¿Fue útil?

Solución

En realidad no es cero, pero podría parecerse a cero si se inspecciona usando printf o NSLog utilizando %f.
Según float.h (al menos en Mac OS X 10.6.2), FLT_MIN se describe como:

/* Minimum normalized positive floating-point number, b**(emin - 1).  */

Tenga en cuenta la en esa frase positiva: FLT_MIN se refiere al número mínimo (normalizado) mayor que cero . (Hay números no normalizados mucho más pequeñas).

Si desea que el mínimo número de punto (incluidos los números negativos), el uso -FLT_MAX flotante.

Otros consejos

Las '% f' formato impresiones 6 decimales en formato fijo. Desde FLT_MIN es mucho más pequeño, se ve como cero en el punto fijo. Si utiliza '% g' formato '% e' o, se obtendría una mejor respuesta con formato. Lo mismo ocurre con el FLT_MAX.

#include <float.h>
#include <stdio.h>
int main(void)
{
    printf("MIN = %f, MAX = %f\n", FLT_MIN, FLT_MAX);
    printf("MIN = %e, MAX = %e\n", FLT_MIN, FLT_MAX);
    return(0);
}


MIN = 0.000000, MAX = 340282346638528859811704183484516925440.000000
MIN = 1.175494e-38, MAX = 3.402823e+38

Siempre que se trate de imprimir el valor de FLT_MIN del archivo de cabecera estándar float.h, obtendrá 0,000000 (como se está viendo en la pantalla de su salida). Eso no es en realidad un error. Usted está recibiendo este resultado debido a que el especificador de formato% f. Generalmente% f imprimir 6 dígitos después del punto decimal, pero en este caso el valor negativo firmado es tan pequeño que necesita imprimir gran cantidad de dígitos después del punto decimal.

he utilizado .54f% (dependiente de la máquina) para obtener el desear, resultado (0.000000000000000000000000000000000000011754943508222875 para mi sistema).

// verificar esta información en su sistema

#include<stdio.h>
#include<float.h>
int main()
{
    printf("Minimum signed float %.55f\n",FLT_MIN);
    printf("Minimum signed float %e\n",FLT_MIN);
    return 0;
}

// Salida: -

// mínimo firmó flotador 0,0000000000000000000000000000000000000117549435082228750

// mínimo flotador firmado 1.175494e-038

creo que ahora está claro a qué te vas a encontrar 0,000000 para CHAR_MIN y cómo para obtener el resultado correcto con el mismo formato specifier.Though puede utilizar% e para un mejor resultado con formato.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top