ENGLISH VERSION |
|
Links | | | Forum | | | Kommentare | | | News melden |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
amiga-news.de Forum > Programmierung > Float Exception | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
-1- | [ - Beitrag schreiben - ] |
12.10.2007, 20:57 Uhr Der_Wanderer Posts: 1229 Nutzer |
Hallo! Diesmal brauche ich Hilfe. Ich habe einen Bilinear Scaling Alog gecoded. Er basiert rein auf Integern. Ich kompiliere meine Textexecutable mit gcc main.c -o testexe Alles ist in einer File. Ich bekomme aber an der markierten Stelle "Floating point exection" als output der Exe, und dann bricht sie ab. Was mache ich falsch ? Sieht sonst alles gut aus. code:--for (dy=0; dy<(dh+bordery); dy++) { int sy = (dy*sh) / dh; // calculate source y int fy = (dy*sh) - (sy*dh); // calculate the fractional part int ify = dh-fy; // calculate the inverse fractional part ARGBPixel *DPixel = ((ARGBPixel*)destaddr) + (dy*dppr); // calculate dest address for (dx=0; dx<(dw+borderx); dx++) { int sx = (dx*sw) / dw; // calculate source x ARGBPixel *SPixel = ((ARGBPixel*)sourceaddr) + (sy*sppr + sx); // calculate source address int fx = (dx*sw) - (sx*dw); // calculate the fractional part int ifx = dw-fx; // calculate the inverse fractional part int div = dx*dy; int faa = ((fx * fy) << 8) / div; <= HIER GIBT ES DAS PROBLEM, bei der Division "/" int fba = ((ifx * fy) <<8) / div; int fab = ((fx * ify) <<8) / div; int fbb = ((ifx * ify) <<8) / div; int C; C = (int)(SPixel[0].A) * faa; // Interpolate alpha C += (int)(SPixel[1].A) * fba; C += (int)(SPixel[sppr].A) * fab; C += (int)(SPixel[sppr+1].A) * fbb; DPixel->A = (UBYTE)(C >> 8); C = (int)(SPixel[0].R) * faa; // Interpolate red C += (int)(SPixel[1].R) * fba; C += (int)(SPixel[sppr].R) * fab; C += (int)(SPixel[sppr+1].R) * fbb; DPixel->R = (UBYTE)(C >> 8); C = (int)(SPixel[0].G) * faa; // Interpolate green C += (int)(SPixel[1].G) * fba; C += (int)(SPixel[sppr].G) * fab; C += (int)(SPixel[sppr+1].G) * fbb; DPixel->G = (UBYTE)(C >> 8); C = (int)(SPixel[0].B) * faa; // Interpolate blue C += (int)(SPixel[1].B) * fba; C += (int)(SPixel[sppr].B) * fab; C += (int)(SPixel[sppr+1].B) * fbb; DPixel->B = (UBYTE)(C >> 8); DPixel++; } } Thilo Köhler, Author von: HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr... Homepage: http://www.hd-rec.de [ - Antworten - Zitieren - Direktlink - ] |
12.10.2007, 21:58 Uhr uho Posts: 114 Nutzer |
@Der_Wanderer: Aber gerne; ist zum Glück nicht zu schwierig: Division durch Null ist halt immer schlecht... int div=dx*dy; - sowohl dx als auch dy beginnen bei 0, womit div natürlich auch 0 ist, was dann zu dem Fehler in besagter Zeile führt. Wundert mich nur, daß das der Compiler überhaupt schluckt; Aztec spuckt selbst, wenn man const int dx=1234, dy=1234; int div=dx*dy; schreibt "initializer is not a constant" aus... Daher hat man dann auch immer viel Extra-Aufwand, wenn man (eigl.) konstante Werte in Strukturen eintragen muß... Gruß uho [ - Antworten - Zitieren - Direktlink - ] |
12.10.2007, 22:15 Uhr Der_Wanderer Posts: 1229 Nutzer |
* kopfklatsch! * Was habe ich da zusammengeproggt !? Das ist natürlich vollkommener Unsinn... Vielen Dank für den Hinweis. -- Thilo Köhler, Author von: HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr... Homepage: http://www.hd-rec.de [ - Antworten - Zitieren - Direktlink - ] |
15.10.2007, 12:00 Uhr Holger Posts: 8116 Nutzer |
Zitat:Willkommen im Jahre 2007 Da kann man das eben hinschreiben, statt const int dx=1234, dy=1234; int div; div=dx*dy; schreiben zu müssen, was an dem grundsätzlichen Problem der Division durch 0 keinen Deut ändern würde. Mit heutigen Compiler kann man halt ein bisschen Schreibarbeit sparen, wobei "heutige" wohl einen Zeitraum irgendwas >10 Jahre umfasst. Interessant aber, dass const int "not a constant" ist... mfg [ Dieser Beitrag wurde von Holger am 15.10.2007 um 12:03 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
-1- | [ - Beitrag schreiben - ] |
amiga-news.de Forum > Programmierung > Float Exception | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten. |