[ Nedeljko @ 05.03.2011. 20:53 ] @
Hteo sam da isprobam zanimljiv fenomen o broju u Mandelbrotovom skupu. Program dajem u prilogu.

Koristim g++ 4.5.0 pod 32-bitnim openSUSE 11.3 sistemom i sve radi lepo bez optimizacije. Međutim, uključim li optimizaciju, program puca!

Program radi ispravno ako se operator + na sledeći način:

Code:
complex operator+ (const complex &z) const {
    complex result(*this);
    
    result += z;
    
    return result;
}


ili ako u main funkciji z1 računam sa

Code:
z1 = z*z;
z1 += c;


Voleo bih da mi još neko potvrdi da je ovo bag, pa da ga prijavljujem.

[Ovu poruku je menjao Nedeljko dana 05.03.2011. u 22:39 GMT+1]
[ Texas Instruments @ 05.03.2011. 23:34 ] @
g++ mandelbrot.cpp -o mandelbrot
./mandelbrot
3.1416000000000002569

g++ mandelbrot.cpp -o mandelbrot -O3
segmentation fault

g++ --version

g++ (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Ubuntu 10.10
[ Goran Rakić @ 05.03.2011. 23:46 ] @
Nedostaje ti return *this; u operatorima =, += i -=

Nakon toga kod mene radi i sa optimizacijom. Greška se prikazuje ako prevedeš sa -Wall opcijom.
[ kiklop74 @ 06.03.2011. 00:03 ] @
A sta se desava kada izmenis nekoliko operatora koji su nekompletni ( ne vracaju rezultat ):

Code:


    complex& operator= (const complex &z) {
    if (this != &z) {
        re = z.re;
        im = z.im;
    }
    return *this;
    }
//...

    complex& operator+= (const complex &z) {
    re += z.re;
    im += z.im;
    return *this;
    }

//...

    complex& operator-= (const complex &z) {
    re -= z.re;
    im -= z.im;
    return *this;
    }




[ kiklop74 @ 06.03.2011. 00:04 ] @
eto pretekose me :)
[ Nedeljko @ 06.03.2011. 00:17 ] @
O, hvala! Koji mi je đavo! Svašta! Ne mogu da verujem da sam toliki slepac da ne vratim *this. Čak ni da uključim upozorenja!

@kiklop74
U ovom slučaju provera da li je &z==this nije potrebna, ali znam da je u opštem slučaju potrebna.
[ Nedeljko @ 06.03.2011. 00:18 ] @
U svakom slučaju, dobro je da sam se prvo javio ovde, da ne prijavljujem kao "bag" nešto što nije 100% provereno.
[ kiklop74 @ 06.03.2011. 00:41 ] @
Da parafraziram poznatu kolumbijsku sapunicu (sin tetas no hay paraiso) - "bez ukljucenih upozorenja nema raja"

[ Goran Rakić @ 06.03.2011. 00:59 ] @
Da sam se kao ti opekao sa onim problemom u proširenoj tačnosti, ni ja ne bih verovao kompilatoru i odmah bih rekao da je opet kriv ;)
[ pera89 @ 06.03.2011. 16:56 ] @
Citat:
@kiklop74
U ovom slučaju provera da li je &z==this nije potrebna, ali znam da je u opštem slučaju potrebna.


U ovom slucaju operator= nije potreban, kao ni konstruktor kopije.
[ Nedeljko @ 06.03.2011. 18:02 ] @
I to je tačno, jer podrazumevane varijante rade na potpuno isti način, ali eto, hteo sam da raspišem. Narafski.