double Type



  • c.rackwitz schrieb:

    C99 weiss um infinities.
    lies dich am besten mal da ein:
    http://www.dinkumware.com/manuals/reader.aspx?lib=cl&h=math.html#INFINITY

    Auf der Seite war ich schon. Ich weiss aber immer noch nicht auf was ich "erg" abfragen soll.

    Warum wurde gerade eben ein Beitrag gelöscht? war das der Autor oder Moderator????? 😕



  • if (isinf(erg)) erg = foobar;



  • 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