![]() |
DEUTSCHE VERSION |
|
![]() |
Links | | | Forums | | | Comments | | | Report news |
![]() |
Chat | | | Polls | | | Newsticker | | | Archive |
![]() |
amiga-news.de Forum > Programmierung > Float Exception | [ - Search - New posts - Register - Login - ] |
-1- | [ - Post reply - ] |
2007-10-12, 20:57 h Der_Wanderer Posts: 1229 User |
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 [ - Answer - Quote - Direct link - ] |
2007-10-12, 21:58 h uho Posts: 114 User |
@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 [ - Answer - Quote - Direct link - ] |
2007-10-12, 22:15 h Der_Wanderer Posts: 1229 User |
* 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 [ - Answer - Quote - Direct link - ] |
2007-10-15, 12:00 h Holger Posts: 8116 User |
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. ] [ - Answer - Quote - Direct link - ] |
-1- | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > Float Exception | [ - Search - New posts - Register - Login - ] |
![]() |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2025 by amiga-news.de - all rights reserved. |
![]() |