Warnung von Funktion eleminieren



  • Hallo Zusammen,
    ich habe folgende kleine Funktion:

    float Generate_Random_Num_UnitPart(float End_Unit) {
    
         struct timeval time;
    
         gettimeofday(&time,NULL);
         srand( time.tv_sec*1000000.0 + time.tv_usec);
         int Int_End, x;
         Int_End = (int) End_Unit;
    
         x=rand() % Int_End ;
         return (float) x;
    
    }
    

    die mir diese Warnung ausgibt:

    warning: conversion to ‘double’ from ‘__suseconds_t’ may alter its value [-Wconversion]
          srand( time.tv_sec*1000000.0 + time.tv_usec);
                                       ^
     warning: conversion to ‘unsigned int’ from ‘double’ may alter its value [-Wfloat-conversion]
          srand( time.tv_sec*1000000.0 + time.tv_usec);
    

    Wie kann ich die Warnung vermeiden?!? 😕 😕
    Vielen Dank im Voraus.
    Der lion1981



  • 1000000.0 ist vom Typ double, ersetze sowas in Integer-Kontexten durch Literale mit gleichrangigem Typ, also

    1000000
    1000000L
    1000000LL
    1000000UL
    1000000ULL
    

    was aber natürlich auch zu Überläufen führen kann, die du kontrollieren solltest.



  • srand ruft man nur einmal im Programm auf.
    Z.B. am Anfang der main .

    time.tv_usec wird i.A. auch nicht in Einerschritten verändert.

    Und wenn du eine Fließkommazahl haben möchtest, dann nutze den ganzen Bereich.

    return rand() *  End_Unit / (RAND_MAX  + 1);
    

Log in to reply