Здравствуй, ЛОР. Долго и упорно прогаю одну хрень, мои мозги уже давно поплавились, и похоже, что уже начал плавиться процессор.
Суть: Есть одна переменная (double), в ней лежит значение. К этой переменной домножается значение, возвращённое одной функцией. Значения достаточно адекватные, но если сделать var*=func(); то в неё записывается НЁХ порядка десяти в десятой степени.
fsfgds.c
dvalue=(double)getInt(routes,N,i,j); dvalue=dvalue*getDouble(tau,N,i,j); tau_ij+=dvalue;
gdb fsfgds
(gdb) break 132 if k==0 && x==1 && y==5 Breakpoint 1 at 0x8048d26: file fsfgds.c, line 132. (gdb) run first.map Starting program: /home/northsoft/fsfgds/fsfgds first.map Breakpoint 1, main (argc=2, argv=0xbffbdb74, env=0xbffbdb80) at fsfgds.c:132 132 dvalue=dvalue*getDouble(tau,N,i,j); (gdb) printf "old dvalue=%f (%e), multiplier=%f (%e)\n", dvalue, dvalue, getDouble(tau,N,i,j), getDouble(tau,N,i,j) old dvalue=192.000000 (1.920000e+02), multiplier=22.062000 (2.206200e+01) (gdb) next 133 tau_ij+=dvalue; (gdb) printf "new dvalue=%f (%e)\n", dvalue, dvalue new dvalue=31246281216.000000 (3.124628e+10) (gdb) quit The program is running. Exit anyway? (y or n) y
dvalue имеет тип double, getDouble — тоже. :)
Приложение однопоточно.
Каждый раз НЁХ разная, хотя исходные данные каждый раз одинаковы, getDouble просто берёт число из матрицы.
Ума не приложу, в чём может быть фишка.
For your consideration:
Linux 2.6.31.13-desktop-1mnb #1 SMP
GNU gdb 6.8-7mdv2010.0 (Mandriva Linux release 2010.0)
gcc версия 4.4.1 (GCC)
Кто-нибудь, пожалуйста, объясните мне, ЧЯДНТ?!?!?!