double Type



  • c.rackwitz schrieb:

    if (isinf(erg)) erg = foobar;

    Danke, ich werde morgen berichten, ob es geklappt hat! 👍



  • Hallo,

    ich habe kein isinf. Hast du anderen Vorschlag?

    mein math.h

    #ifndef  _MATH_H_INCLUDED
    #define  _MATH_H_INCLUDED
    #ifndef HUGE_VAL
    
    #define HUGE_VAL (*HUGE_dll)
    extern double *HUGE_dll;
    
    #endif /* ! defined (HUGE_VAL) */
    
    /* Reentrant ANSI C functions.  */
    
    extern double atan(double);
    extern double cos(double);
    extern double sin(double);
    extern double tan(double);
    extern double tanh(double);
    extern double frexp(double, int *);
    extern double modf(double, double *);
    extern double ceil(double);
    extern double fabs(double);
    extern double floor(double);
    
    extern double acos (double);
    extern double asin (double);
    extern double atan2 (double, double);
    extern double cosh (double);
    extern double sinh (double);
    extern double exp(double);
    extern double ldexp(double, int);
    extern double log(double);
    extern double log10(double);
    extern double pow(double, double);
    extern double sqrt(double);
    extern double fmod(double, double);
    
    /* Non ANSI double precision functions.  */
    
    extern double infinity(void);
    extern int isnan (double);
    extern int finite (double);
    extern double copysign(double, double);
    
    extern double asinh (double);
    extern double nextafter (double, double);
    
    extern double acosh (double);
    extern double atanh(double);
    extern double lgamma (double);
    extern double y0 (double);
    extern double y1 (double);
    extern double yn(int, double);
    extern double j0(double);
    extern double j1 (double);
    extern double jn (int, double);
    #define log2(x) (log (x) / M_LOG2_E)
    
    extern double hypot (double, double);
    #define _hypot hypot
    
    extern double cabs(struct complex);
    
    /* The exception structure passed to the matherr routine.  */
    
    struct exception 
    {
      int type;
      char *name;
      double arg1;
      double arg2;
      double retval;
      int err;
    };
    
    extern int matherr (struct exception *e);
    
    /* Values for the type field of struct exception.  */
    
    #define DOMAIN 1
    #define SING 2
    #define OVERFLOW 3
    #define UNDERFLOW 4
    #define TLOSS 5
    #define PLOSS 6
    
    /* Useful constants.  */
    
    #define M_E		2.7182818284590452354
    #define M_LOG2E		1.4426950408889634074
    #define M_LOG10E	0.43429448190325182765
    #define M_LN2		0.69314718055994530942
    #define M_LN10		2.30258509299404568402
    #define M_PI		3.14159265358979323846
    #define M_TWOPI         (M_PI * 2.0)
    #define M_PI_2		1.57079632679489661923
    #define M_PI_4		0.78539816339744830962
    #define M_3PI_4		2.3561944901923448370E0
    #define M_SQRTPI        1.77245385090551602792981
    #define M_1_PI		0.31830988618379067154
    #define M_2_PI		0.63661977236758134308
    #define M_2_SQRTPI	1.12837916709551257390
    #define M_SQRT2		1.41421356237309504880
    #define M_SQRT1_2	0.70710678118654752440
    #define M_LN2LO         1.9082149292705877000E-10
    #define M_LN2HI         6.9314718036912381649E-1
    #define M_SQRT3   	1.73205080756887719000
    #define M_IVLN10        0.43429448190325182765 /* 1 / log(10) */
    #define M_LOG2_E        0.693147180559945309417
    #define M_INVLN2        1.4426950408889633870E0  /* 1 / log(2) */
    
    #endif /* _MATH_H_ */
    


  • Bond schrieb:

    Hallo,

    ich habe kein isinf. Hast du anderen Vorschlag?

    mein math.h

    extern int finite (double);
    

    Diese Funktion könnte etwas bringen 😉

    man: finite:

    finite() returns the value 1 just when -Infinity < x < +Infinity; otherwise a zero is returned (when |x| = Infinity or x is NaN.



  • Habe jetzt so gelöst:

    if(erg > DBL_MAX) erg=DBL_MAX;
    	if(erg < DBL_MIN) erg=DBL_MIN;
    

    was haltet ihr davon?



  • Eine frage habe ich noch:
    Das double-bereich zieht sich von -….. bis +….. (maschinen abhängig)
    Wo finde ich diese Angaben?
    In meinem float.h stehen nur positive Werte.
    Wenn ich aber unendliche Schleife erstelle, so werden auch negative Double-Werte angezeigt
    SCHLEIFE:

    while(1!=0)                                         
        	 {                              
          printf("inf_min ist %f\n",i);                       
    
          i=-i*9999999999*9999999999*999999999*99999999;
    }
    

    FLOAT.H

    #if !defined(_FLOAT_H)
    #define _FLOAT_H
    
    #define	FLT_RADIX		2
    
    #if defined(_FPF387)
    #define FLT_ROUNDS		0
    #endif
    
    #if defined(_FPF881) || defined(_FPFPOWERPC) || defined(_FPFCMX)  || defined(_FPFMIPS) || defined(_FPFARM) || defined(_FPFSPARC) || defined(_FPFSH) || defined(_FPFSH4) || defined(_FPFSH5M)
    #define FLT_ROUNDS		1
    #endif
    
    #define	FLT_MANT_DIG	24
    #define	FLT_EPSILON		1.119209290e-07f
    #define	FLT_DIG			6
    #define	FLT_MIN_EXP		-125
    #define	FLT_MIN			1.17549435e-38f
    #define	FLT_MIN_10_EXP	-37
    #define	FLT_MAX_EXP		128
    #define	FLT_MAX			3.40282346e+38f
    #define	FLT_MAX_10_EXP	38
    #define	DBL_MANT_DIG	53
    #define	DBL_EPSILON		2.2204460492503131e-16
    #define	DBL_DIG			15
    #define	DBL_MIN_EXP		-1021
    #define	DBL_MIN			2.2250738585072016e-308
    #define	DBL_MIN_10_EXP	-307
    #define	DBL_MAX_EXP		1024
    #define	DBL_MAX			1.7976931348623156e308
    #define	DBL_MAX_10_EXP	308
    #define	LDBL_MANT_DIG	53
    #define	LDBL_EPSILON		2.2204460492503131e-16
    #define	LDBL_DIG			15
    #define	LDBL_MIN_EXP		-1021
    #define	LDBL_MIN			2.2250738585072016e-308
    #define	LDBL_MIN_10_EXP	-307
    #define	LDBL_MAX_EXP		1024
    #define	LDBL_MAX			1.7976931348623156e308
    #define	LDBL_MAX_10_EXP	308
    
    /* Extensions */
    #define _DBL_MAX_FRAC		.17976931348623157
    #define	_DBL_MIN_FRAC		.22250738585072016
    #define _DBL_EXP_BIAS		1023
    #define _DBL_MAX_BIAS_EXP	2047
    
    #endif /* _FLOAT_H */
    

    MfG,



  • Bond schrieb:

    In meinem float.h stehen nur positive Werte.

    Die Minima sind betragsmäßig gleich den Maxima, nur das Vorzeichen ist umgedreht.



  • Bashar schrieb:

    Bond schrieb:

    In meinem float.h stehen nur positive Werte.

    Die Minima sind betragsmäßig gleich den Maxima, nur das Vorzeichen ist umgedreht.

    Für was steht dann DBL_MIN???



  • fuer eine sehr kleine zahl, also etwas nahe an null?



  • Ja klar, das sehe ich auch. Aber warum heißt es dann DBL_MIN.
    Steht es nicht für min.double????
    Und ist DBL_MAX nicht max.Double???



  • Bond schrieb:

    Ja klar, das sehe ich auch. Aber warum heißt es dann DBL_MIN.
    Steht es nicht für min.double????
    Und ist DBL_MAX nicht max.Double???

    min.double und max.double sind keine korrekten C-Identifier, deswegen die Namenswahl DBL_MIN (kleinste positive double-Zahl) bzw. DBL_MAX.

    PS: Unter C++ ist das etwas klarer, dort heißt das "numeric_limits<double>::min" bzw. "numeric_limits<double>::max"


Anmelden zum Antworten