Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

1

11.02.2007, 20:47

Auf natürliche Zahl prüfen

Hallo zusammen,

gibt es einen Befehl, der mir zurückliefert, ob eine Zahl eine natürliche Zahl ist?

Grüße - spacegaier

Sheddex

unregistriert

2

11.02.2007, 20:56

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
float Zahl = 0.0f;

//Auf Negativität überprüfen

if (Zahl < 0.0f)
{
   //Nicht natürlich

}

//Auf Dezimalstellen überprüfen


//Hier werden die Nachkommastellen abgeschnitten

int Zahl2 = static_cast<int>(Zahl);

//Hier wird nun überprüft ob die Zahl Nachkommastellen hat oder nicht

//Wenn nicht dann ist sie unnatürlich

if (Zahl != static_cast<float>(Zahl2))
{
   //Nicht natürlich

}


Ich denk mal das müsste so funktionieren, hab's nicht getestet.

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

3

11.02.2007, 20:58

C-/C++-Quelltext

1
2
3
4
if ((zahl>0) && (static_cast<unsigned int>(zahl)==zahl))
{
  // das is ne natürliche

}


meinst du was in dieser Richtung? (hoffe das funzt so, is ungetestet^^)

// mal wieder bisschen langsam

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

4

12.02.2007, 17:09

grek ich glaube deine Lösung ist glaub ich nicht Typsicher, da wird ein unsigned int mit einem float verglichen.

C-/C++-Quelltext

1
static_cast<float>(static_cast<unsigned long>(Zahl) == Zahl)

das wäre meine Idee dafür.

Übrigens zählt in der Schulmathematik die 0 nicht zu den natürlichen Zahlen, in der akademischen Mathematik schon, je nachdem was du machen willst solltest du darauf achten.

ChrisJ

Alter Hase

Beiträge: 487

Wohnort: Schweich

Beruf: Schüler

  • Private Nachricht senden

5

12.02.2007, 21:08

Zitat von »"rewb0rn"«

Übrigens zählt in der Schulmathematik die 0 nicht zu den natürlichen Zahlen, ...

doch, ich glaube schon. auch in der schule wird zwischen |N und |N* unterschieden.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

12.02.2007, 21:50

Zitat von »"wikipedia"«

Die natürlichen Zahlen sind die beim Zählen verwendeten Zahlen 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, usw. Oft wird auch die 0 (Null) zu den natürlichen Zahlen gerechnet.


ob die 0 nun dazugehört oder nicht ist afaik nicht so eindeutig definiert. die eine literatur machts so, die andre so.
bei uns an der uni ist es nicht üblich, dass die 0 dazugehört.

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

7

13.02.2007, 08:19

Also ich hab das sowohl in der Schule in NRW als auch in der Uni in Berlin so gelernt, aber das es anderswo anders ist kann natürlich sein.

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

8

13.02.2007, 12:04

Hier noch eine Lösung, die keine unschönen und u.U. unperformanten Casts verwendet:

C-/C++-Quelltext

1
bool elementofN = (x > 0) && (x == floor(x));

Vergleiche von Floats und Tests auf positiv (und auch auf negativ oder 0) sind ebenso schnell wie bei Ints, insofern lohnen sich die Int-Casts nicht. Ferner ist die floot-Operation mindestens so schnell wie ein Cast zu Int, wahrscheinlich schneller.

Eine weitere Möglichkeit wäre es, modf zu benutzen, weil diese Funktion direkt die Nachkommastellen extrahiert. Aber das passt dann leider nicht mehr so schön in eine Zeile und würde zusätzlich einen Overhead wegen der "Hilfsvariablen" und der Berechnung dieser bedeuten.
Kommen Sie nie mit einem Schwert zu einer Schießerei.

9

13.02.2007, 12:23

Zitat von »"rewb0rn"«

Also ich hab das sowohl in der Schule in NRW als auch in der Uni in Berlin so gelernt, aber das es anderswo anders ist kann natürlich sein.

Das glaube ich nicht Tim :D
Die Mathematik ist eindeutig definiert und nicht interpretierbar. Also hat jemand unrecht denn beides kann nicht richtig sein.

big_muff

Alter Hase

Beiträge: 460

Wohnort: Schweiz

Beruf: Informatikstudent (4. Semester)

  • Private Nachricht senden

10

13.02.2007, 13:27

Zitat von »"chriss"«

Das glaube ich nicht Tim :D
Die Mathematik ist eindeutig definiert und nicht interpretierbar.

Denkste.
Die Frage ob 0 mit zu den natürlichen Zahlen gehört ist unter den Mathematikern umstritten. Die einen machens so, die anderen anders. Und es gibt noch viele Themen bei denen sich die Mathematiker nicht einig sind.
Schlussendlich ist es aber Zeitverschwendung darüber nachzudenken, denn eine eindeutige Lösung gibt es nicht.
Nur Idioten halten Ordnung, ein Genie beherrscht das Chaos.[size=7]

[/size]HardFate - Ein Start, Ein Ziel, Viele Wege[size=7]

[/size]Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.

Werbeanzeige