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

1

28.12.2010, 11:46

For Schleife anders erhöhren als i++

Hallo
Was währe, wenn ich jetzt z.b. möchte das i immer um 0,1 erhöt wird?
Muss ich dann eine andere Schleife nehmen?

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

2

28.12.2010, 11:55

erstmal sollte man aus performance- und logischen gründen das präinkrementieren, also ++i, vorziehen. wenn du i nur um 0,1 erhöhen willst musst du i += 0.1; schreiben. wobei i vom datentyp her natürlich eine fließkommazahl sein sollte^^
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

pepe1995

Frischling

Beiträge: 60

Wohnort: Warngau

Beruf: Schüler (10.)

  • Private Nachricht senden

3

28.12.2010, 12:05

was du machen könntest ist

C-/C++-Quelltext

1
2
3
4
5
6
7
8
const float fmax = 1.0f;
float fi = 0.1;

while (fi < fmax)
{
    // Irgendetwas machen
    fi += 0.1;
}
www.4story.de
ROCKT! ;)

BlazeX

Alter Hase

Beiträge: 478

Wohnort: DD

Beruf: Maschinenbau-Student

  • Private Nachricht senden

4

28.12.2010, 12:08

Ob Prä- oder Postinkrementieren sollte egal sein. Ein guter Compiler optimiert das vernünftig.

5

28.12.2010, 12:14

Super danke (:
Die schnelle Hilfe von anderen Usern hier ist echt super!

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

6

28.12.2010, 12:14

Ob Prä- oder Postinkrementieren sollte egal sein. Ein guter Compiler optimiert das vernünftig.

sobald es sich aber um einen, vllt sogar selbst implementierten, iterator handelt kann man sich da nicht so sicher sein.
ausserdem hab ich zwei gründe genannt. der postinkrementoperator wird in nur 1-5% der fälle wirklich gebraucht. und ob man nun ++i oder i++ schreibt ist doch kein großer unterschied. deshalb lautet der tipp: gewöhn dich an präinkrement und verwende postinkrement nur wenn du weiß was du tust ;)


edit: achja, nur weil es sich bei der zählervariable um eine fließkommazahl handelt und du anstelle des inkrementoperators den +=operator benutzt musst du die schleife nicht in eine while schleife umschreiben.

C-/C++-Quelltext

1
for(float i = 0; i < 4; i += 3123.23f)...

funktioniert genau so gut.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

28.12.2010, 13:23

Eine Gleitkommazahl als Schleifenzähler ist generell eine sehr sehr schlechte Idee. Warum? Am Besten vielleicht ein paar Beispiele dazu:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  for (float x = 0.0; x < 0.7; x += 0.35)
  {
    // Wie oft wird diese Schleife durchlaufen?
    // Antwort: Dank Rundungsfehlern je nach Compiler und Plattform 2 oder 3 Mal
  }

  for (float x = 0; x != 15185185047; x += 123456789)
  {
    // Dank Gleitkomma: Endlosschleife
  }

  for (float x = 0.0f; x != 1.0f; x += 0.1f)
  {
    // Dank Rundungsfehler: Endlosschleife
  }

  for (float x = 0.0f; x < 1.0f; x += 0.0000000001f)
  {
    // Dank Gleitkomma + Rundungsfehler: Endlosschleife
  }

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

8

28.12.2010, 13:31

Hier auf Seite 14 hat es auch noch 2 Beispiele zu solchen Fehlern.
Begründung ist analog zu denen, die dot genannt hat.

9

28.12.2010, 17:00

OK (:
Beispiele sind einleutend.

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

10

29.12.2010, 08:58

Die flexibelsten Versionen sind gar nicht da!

C-/C++-Quelltext

1
2
3
for( blubb();nochweiter();wasimmerduwillst(mitwasimmerduwillst))
{
}

Werbeanzeige