Abfrage natürliche Zahl?



  • Slin schrieb:

    Hab gerade ncoh ne andere idee, weiß aber auch nciht ob das sinnvoller ist:
    Caste sie einfach zweimal, erst in einen int, dannw eider zurück zu double, wenn es dann ncoh die glecih ist, dann war sie vorher schon natürlich

    if (x>0 && (double)((int)x)==x)
    

    das sollte es schon tun

    if( x%1 != 0 && x>0)
    

    Oder lieg ich jetzt komplett falsch?



  • xBlackKnightx schrieb:

    n * 0 = 0 <-- was hat das für einen Sinn? immer nur Null?

    n / 0 = error <-- wozu error? etwas nützliches sollte man rauskratzen!

    0 / n = 0 <-- was hat das für einen Sinn?? immer nur Null?

    1. n / 0 gibt nan, zumindest bei Fließkommazahlen
    2. Äh...das macht sogar ziemlich viel Sinn. Also - auf so ziemlich jede andere Art würde es keinen Sinn machen. Du musst dabei bedenken, dass die 0 nicht immer als Konstante im Code auftaucht. Sehr gut denkbar wäre etwas dieser Art:

    double d;
    
    cin >> d;
    cout << "Fläche eines Kreises mit Radius " << d << ": " << (3.1415926 * d * d) << endl;
    

    Wenn der User 0 eingibt, gibts halt 0 - und das ist ja auch richtig.



  • the_alien schrieb:

    if (x>0 && (double)((int)x)==x)
    

    das sollte es schon tun

    if( x%1 != 0 && x>0)
    

    Oder lieg ich jetzt komplett falsch?[/quote]

    Zum einen wolltest du glaub ich [cpp]if( x%1 == 0 && x>0)[/cpp] schreiben.
    Und, ja das hatte ich acuh erst angedacht, aber da der ModuloOperator nur Sinn für Ganzzahlige Werte macht, sollte er in C/C++ auch nur für Integers definiert sein. Also wird an der Stelle wo

    x%1
    

    steht automatischen nen cast nach (int) gemacht, bevor der Modulooperator Anwendung findet, was jedoch dazu führt, dass

    x%1 == 0
    

    immer true ergibt. Und das wäre nicht so hilfreich.



  • Slin schrieb:

    Natürlich heißt, wenn ich mich recht erinner größe als Null und keine Stellen hinterm Komma oder.

    ich glaub' die 0 gehört dazu



  • net schrieb:

    Slin schrieb:

    Natürlich heißt, wenn ich mich recht erinner größe als Null und keine Stellen hinterm Komma oder.

    ich glaub' die 0 gehört dazu

    Laut Wikipedia definitionssache

    http://de.wikipedia.org/wiki/Nat%C3%BCrliche_Zahlen



  • Slin schrieb:

    Zum einen wolltest du glaub ich [cpp]if( x%1 == 0 && x>0)[/cpp] schreiben.
    Und, ja das hatte ich acuh erst angedacht, aber da der ModuloOperator nur Sinn für Ganzzahlige Werte macht, sollte er in C/C++ auch nur für Integers definiert sein. Also wird an der Stelle wo

    x%1
    

    steht automatischen nen cast nach (int) gemacht, bevor der Modulooperator Anwendung findet, was jedoch dazu führt, dass

    x%1 == 0
    

    immer true ergibt. Und das wäre nicht so hilfreich.

    Ja, wollte ich 😃

    Dann ist die Methode mit dem Doppelcast wohl noch die einfachste.



  • groovemaster schrieb:

    Sicher. Sonst noch irgendwelche unsinnigen Vorschläge?

    Wieso? Ist doch ne Idee. Gebe aber zu, das ich die aufgabe falsch verstanden habe...

    Besser?

    double wert;
    if(wert(int)!=wert){
    	//keine ganzzahl
    }else{
    	//ganzzahl
    }
    


  • Du meinst wohl eher

    if (int(wert) != wert)
    


  • hm, alles quatsch ^^

    #include <cmath>
    
    bool IstGanzzahl(double d)
    {
       return d == std::floor(d);
    }
    

    funktioiniert übrigens für den gesamten bereich von double und
    nicht nur für -2^31 bis 2^31-1 (so wie beim int cast)

    das casten von double in int oder einen anderen integertypen ist generell nicht zu empfehlen und würde ich persönlich immer versuchen zu vermeiden.

    MfG
    DDR-RAM



  • xBlackKnightx schrieb:

    n * 0 = 0 <-- was hat das für einen Sinn? immer nur Null?

    Was hat eigentlich Multiplizieren mit 1 für nen Sinn? Kommt ja immer nur der andere Faktor raus. Warum ist das dann erlaubt?

    n / 0 = error <-- wozu error? etwas nützliches sollte man rauskratzen!

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-77147-and-highlight-is-division.html

    0 / n = 0 <-- was hat das für einen Sinn?? immer nur Null?

    Ja warum denn nicht?


Anmelden zum Antworten