🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: de.comp.lang.c++
Article #1928

Re: wrap around abfragen/verhindern

#1928
From: Joerg Bornemann
Date: Mon, 25 Mar 1996 13:37
65 lines
2902 bytes
uz@wuschel.ibb.schwaben.com wrote:

> > Wie kann ich den wrap around von Variablen
> > vom Typ int in einer Schleife am besten abfragen?
>
> In sowas ist C nicht besonders gut. Das ist eines der wenigen Probleme, das
> sich mit erheblich weniger Aufwand in Assembler als in C loesen laesst.

Mein Algo sollte also am besten so geaendert werden,
dass die Bereichsueberschreitung gar nicht auftreten kann?

BTW in meinem Programmierhandbuch habe ich dann doch noch nach langem  
Suchen einen Verweis auf's Referenzhandbuch (_matherr, signal) gefunden.
Im Referenzhandbuch steht unter _matherr, genau das was ich suche.
Das Beispiel in der Onlinehilfe war aber wieder ganz toll:

/* _matherr Beispiel */

Ha ha ha. Was hab' ich gelacht. :-(

Nun kann ich leider nichts mit der knappen
Beschreibung aus dem Handbuch (Borland) anfangen...

> Eine Moeglichkeit ist das Ausweichen auf einen Datentyp, der einen
> groesseren Wertebereich darstellen kann (long oder double) und Vergleich
> des Ergebnisses.

Kommt leider nicht in Frage, da die Werte erheblich groesser werden und  
ausserdem ist das Verschwendung (in meinem spez. Fall), da ich die Werte  
gar nicht auswerten, sondern nur abfangen will.

> Wenn es sich nur um eine bestimmte Operation handelt (z.B. nur Addition),
> dann lassen sich auch Spezial-Loesungen finden, die setzen aber einen Test
> vor der Operation voraus, weil die Addition im Falle eines Ueberlaufs
> Information verliert.
>
> Es kommt also ein bischen drauf an, was Du ueberhaupt vorhast...

Ich will eine Funktion in ein Fenster malen, dessen Groesse variabel ist.

Hier mal 'n Programm-Ausschnitt:

wr.right hat den Wert der Fensterbreite / 2,
die erst zur Laufzeit feststeht.

1: for(i = -wr.right; i <= wr.right; i++)
2: {
3:         // Es wird der Funktionswert von f(i)=i^3 berechnet
4:         y = i*i*i; // Gleichung kann natuerlich auch anders lauten
5:         ... Umrechnung in Fensterkoordinaten und Punkte zeichnen
6: }

In Zeile 4 erhalte ich somit in den ersten und in den letzten  
Schleifendurchgaengen einen wrap around. Die letzten wrap arounds kann ich  
verhindern, in dem ich negative y-Werte nach der Umrechnung in  
Bildschirmkoordinaten abfrage und die Schleife per *break* beende.
Nur die ersten w.a.'s nicht.

Nun koennte ich natuerlich zwei Schleifen schreiben. Eine fuer negative i  
und eine fuer positive i, aber das waere nur maessig effektiv, schlecht zu  
warten und ziemlich unuebersichtlich...

cu Joerg
--
E-Mail: juri@compi.baltic.de
Technical Details
Message-ID: <65YKVe2rHvB@compi.baltic.de>
Path: arc1-ca.pugleaf.net!compi.baltic.de!juri
References: <65QI1FlrHvB@compi.baltic.de> <M9P0B3FL@wuschel.ibb.schwaben.com>

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!compi.baltic.de!juri
Date: 25 Mar 1996 14:37:00 +0100
From: juri@compi.baltic.de (Joerg Bornemann)
Newsgroups: de.comp.lang.c++
Message-ID: <65YKVe2rHvB@compi.baltic.de>
References: <65QI1FlrHvB@compi.baltic.de>
 <M9P0B3FL@wuschel.ibb.schwaben.com>
Subject: Re: wrap around abfragen/verhindern
X-Newsreader: CrossPoint v3.1