LINUX.ORG.RU

[gcc] чудеса с float/double

 


0

1

Есть програмуллина на С выводит изображение, используя граф библиотеку. Там есть код;
double rand1 = (int)(750000+(1200000-750000)*genrand_real2())/10000000;
double rand2 = (int)(750000+(1200000-750000)*genrand_real2())/10000000;
double rand3 = (int)(750000+(1200000-750000)*genrand_real2())/10000000;
double rand4 = (int)(750000+(1200000-750000)*genrand_real2())/10000000;
// phases
double rand5 = (int)(0+(31415926-0)*genrand_real2())/10000000;
double rand6 = (int)(0+(31415926-0)*genrand_real2())/10000000;
double rand7 = (int)(0+(31415926-0)*genrand_real2())/10000000;
double rand8 = (int)(0+(31415926-0)*genrand_real2())/10000000;
// amplitudes
double rand9 = (int)(330+(420-330)*genrand_real2())/110;
double rand10 = (int)(330+(450-330)*genrand_real2())/110;
(genrand_real2 - это генератор псевдослучайных чисел ). Если компилить программу компилятором gcc 4.2.1 ( gcc -lgd 1.c ), то изображение не выводится ( printf после объявление этих переменных не работает ), программа при запуске тормозит ( segm failt не валится ). Если компилить компилятором gcc 4.4.4 - все работает. Вопрос: что это ?

★★☆☆

Последнее исправление: SI (всего исправлений: 1)

почитать чейнжлог gcc?

wlan ★★
()

Покажи исходники.

Deleted
()

а что из себя представляет genrand_real2() ? в смысле код его :)

хотя скорее всего - нужно вам взять профайлер, отладчик и искать где память упахалась. При смене компилятора (и части библиотек/версий) упаханная область легла чуть подругому и стала явно заметно сказываться.

MKuznetsov ★★★★★
()
Ответ на: комментарий от true_admin

нда gcc -pg -fprofile-arcs -ftest-coverage помогло. причина вообще в другом месте оказалась.

SI ★★☆☆
() автор топика
Ответ на: комментарий от true_admin

да из-за него и были эти чудеса Причем видимо новому gcc на это наплевать.

SI ★★☆☆
() автор топика
Ответ на: комментарий от SI

было так:

int shift = 0;

if(...) {
   int shift=0;
}
else {
   shift = 1;
}

Тут нет проблемы, т.к. данный код равносилен этому:

int shift = 0;

if(... == false) {
   shift = 1;
} 

Ищите проблему дальше.

andreyu ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.