2017-09-17 2 views
-1

Ich arbeitete an einem maximalen Wertebereich, den C++ 's == Operator vergleichen kann. Programm, die tatsächlich mit Zahlen im Bereich von 0 bis 9 × 10 , vom Benutzer geliefert beschäftigen.Bereich der von Operatoren unterstützten Zahlen

Lassen Sie 9 × 10 der maximale Wert sein, den der Benutzer liefert.

if(x == y) { cout << "x and y are equal"; } 

So wird der Bediener == der Lage sein, so viele große Auswahl an Wert zu vergleichen?

+0

Integer oder Floats? – Rotem

+0

@Rotem nein nein .... der Benutzer kann eine Nr. Eingeben. das mag so viel riesig sein. Es liegt an uns, welchen Datentyp – kislay1812

Antwort

0

Die Antworten sind irreführend. operator== kann immer mit jedem in den Operanden enthaltenen Wert arbeiten. Es kann auch für benutzerdefinierte Typen definiert werden, einschließlich Klassen, die größere Zahlen als die integrierten Typen darstellen können. Dies bedeutet, dass operator==, wenn definiert, funktioniert.

Wenn Ihr Programm einen vom Benutzer bereitgestellten Wert nicht enthält, wird es in dem Moment zugewiesen, in dem es x oder y zugewiesen ist. Wenn ihre Typen nicht über den Bereich verfügen, in dem die vom Benutzer angegebene Nummer gespeichert werden kann, wird sie abgeschnitten oder Ihr Programm schlägt möglicherweise fehl, je nachdem, wie Sie Ihre Zahlen erhalten. Wenn die Anweisung x == y ausgewertet wird, arbeitet operator== auf jeden Fall mit den Werten x und y unabhängig davon, ob sie die Werte enthalten, die Sie dachten, sie würden.

+0

Wie ist meine Antwort irreführend? Ich sagte genau "es hängt von den Arten von Operanden ab" _? – user0042

+0

Ihre Antwort ist nicht falsch, aber es ist nicht ausreichend. "Abhängig von den Typen der Operanden" könnte jeder Wert sein, der eine Funktion des Operandentyps ist, und es zeigt nicht die tatsächliche Antwort an, dass jeder Wert des Operanden für "operator ==" gültig ist. Es zeigt OP nicht klar an, dass, wenn ein Problem mit der Reichweite besteht, garantiert ist, dass es nicht "Bediener ==" ist. – patatahooligan

1

Solange Ihr variabler Typ so viel große Zahl enthalten kann (wie lange lange int, lange doppelte usw.), macht '==' seine Aufgabe. Es geht nicht um den Operator '==', seien Sie vorsichtig, dass Ihre Zahl im Bereich Ihrer Variablen liegt, um schlechte Ergebnisse zu eliminieren.

Edit:

  • "Range" für Gleitkommazahlen ist nicht genau das, was diese Antwort impliziert. - @StoryTeller

So ist es besser, nicht zu verwenden '==' direkt für Zahlen schwimmen.

Aber:

#include <iostream> 
using namespace std; 

int main() 
{ 
    float x{5.5}; 
    float y{5.5}; 
    if(x==y) cout<<"As expected"<<endl; 

    return 0; 
} 

Das Ergebnis:

g++ -std=c++11 main.cpp -o a.out 
./a.out 
As expected 

Das Problem war, erwähnt, dass, wenn ich schwimmt in diesem Code zu ändern:

float x{5.5666666}; 
float y{5.56666665}; 

-Code auch sagt, sie sind gleich.

+1

'==' auch für die Implementierung einer 'BigInteger' Klasse zu verwenden. Es hat nichts mit dem Operator selbst zu tun. Deine Antwort ist also irreführend, wenn nicht falsch. – user0042

+0

@ user0042 ist es nicht dasselbe mit meiner Antwort? – ssovukluk

+0

Okay, also summieren, solange die Zahl im Bereich des Datentyps liegt, == Operator kann leicht seine Aufgabe ausführen ... Ist das was du meinst @ssovukluk – kislay1812

1

Welcher Nummernbereich mit dem == oder anderen Operatoren unterstützt wird, hängt vollständig von den Typen der Operanden ab.

Wenn Sie intrinsische Typen als Operanden haben, können Sie sich std::numeric_limits ansehen, um zu erfahren, welche spezifischen Nummerngrenzen für Ihr spezifisches System gelten.

Wie auch immer, die == und andere Operatoren können für z.B. eine BigNumber Klasse, die mit Zahlen umgehen kann, die über die intrinsischen Grenzen hinausgehen.


Beachten Sie, dass mit == Gleitkommazahlen Vergleich selten funktioniert wie gedacht, da es unwahrscheinlich ist, werden sie genaue Zahlen als Ergebnis mehrerer Berechnungen haben. Das Beispiel für std::numeric_limits::epsilon zeigt, wie Gleitkommazahlen für fast Gleichheit verglichen werden können.

+0

@ user0042 Ich habe versucht float x = 5, y = 5; if (x == y) cout << wahr; sonst cout << falsch; Und auf mysteriöse Weise produzierte es falsch ... Warum so ?? – kislay1812

+0

@ kislay1812 Lesen Sie den zweiten Teil meiner Antwort, und gehen Sie zu dem Link für 'std :: numeric_limits :: epsilon' zu verstehen. – user0042

+1

@ kislay1812 Das sollte nicht passieren. Kannst du ein [mcve] zeigen? – melpomene

Verwandte Themen