2 C++ Fragen

Seite 1 von 1 - Forum: Offtopic auf overclockers.at

URL: https://www.overclockers.at/offtopic/2_c_fragen_2602/page_1 - zur Vollversion wechseln!


Lactobacillus schrieb am 18.02.2001 um 13:55

Hallo,

meine 2 Fragen:

* Wie kann ich am besten testen, ob eine Variable (oder eine "Rechnung") eine ganze Zahl ist, oder nicht?

* Wie kann ich am besten aus einer Variable (oder einer "Rechnung") die Quadratwurzel ziehen?

Was ich eigentlich machen will?

Zitat
(Stellea und Stelleb sind beide Integer-Variablen)

Wenn die Quadratwurzel aus Stellea * Stellea + Stelleb * Stelleb eine ganze Zahl ist, dann...

Wenn Interesse besteht, oder es Unklarheiten gibt, dann kann ich auch den ganzen Quelltext posten/mailen...

BTW: Ich verwende Visual C++ 6 SP4.

Danke
Lactobacillus, der noch das braucht um den *beep* endlich zu releasen :D

[ 18 February 2001: Message edited by: Lactobacillus ]


Lactobacillus schrieb am 18.02.2001 um 18:22

Keine C++ler hier? *heul*


Lactobacillus schrieb am 18.02.2001 um 22:08

*schluchts*


Lactobacillus schrieb am 19.02.2001 um 07:26

Thx,

kann ich auch sqrt(Variable*Variable...) verwenden?

Der Quelltext:

Zitat
int Stellea(1),Stelleb(1),max;
(...)
while (Stellea<=max) //max wird vorher schon von der Tastertur eingelesen
{
if Quadratwurzel(Stellea * Stellea + Stelleb * Stelleb) ist eine ganze Zahl (=keine Nachkommastellen)
{
cout<<"!"<<Stellea<<" "<<Stelleb<<endl;
}
Stelleb++;
if (Stelleb==(max+1))
{
Stellea++;
Stelleb=Stellea; //Optim.
}

Also: Stellea und Stelleb nehmen alle Möglichkeiten (wenn max 2 ist 0-1 1-1 1-2 2-2) an. Wenn die Wurzel aus Stellea*Stellea + Stelleb*Stelleb eine ganze Zahl ist, dann...

Wenn du willst dann schicke ich dir die ganze Datei, dass hier ist etwas gekürzt...

Danke!
Lactobacillus

[ 19 February 2001: Message edited by: Lactobacillus ]

[ 19 February 2001: Message edited by: Lactobacillus ]

[ 19 February 2001: Message edited by: Lactobacillus ]


Ringding schrieb am 19.02.2001 um 10:33

Rechnen mit Gleitpunktzahlen ist nie so einfach wie es ausschaut. Der Test, ob irgendeine Zahl eine ganze Zahl ist, ist unmöglich, weil bei den meisten Berechnungen Rundungsfehler auftreten.

In diesem Fall kommst du noch einfach weg: Um zu überprüfen, ob die Wurzel eine ganze Zahl ist, ziehe die Wurzel und runde sie zur nächsten ganzen Zahl. Dann quadriere diese gerundete Zahl und überprüfe, ob sie mit der Ausgangszahl übereinstimmt.


Lactobacillus schrieb am 19.02.2001 um 14:22

Thx,

wie runde ich zur nächsten Zahl?

Du meinst man sollte folgendes machen

Zitat
if (gerundet(Quadratwurzel(Stellea*Stellea+Stelleb*Stelleb) * gerundet(Quadratwurzel(Stellea*Stellea+Stelleb*Stelleb) == (Stellea*Stellea+Stelleb*Stelleb))...

Wie könnte man konkret realisieren?

Lactobacillus

[ 19 February 2001: Message edited by: Lactobacillus ]


Ringding schrieb am 19.02.2001 um 14:27

Für positive Zahlen floor(x+0.5)

Ja, so meine ich es

[ 19 February 2001: Message edited by: Ringding ]


Lactobacillus schrieb am 19.02.2001 um 16:26

Thx, es funkt...

Lactobacillus




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2024