Floating point overflow - C (СИ)
Формулировка задачи:
число написанных мной программ на С перевалило 100 но с таким впервые
Непонятное исключение на операторе step=1./N - выдает переполнение и исключение
Этот код в -h файле. Никаких одноименных переменных N нигде кроме как здесь нет.
В отладчике видно N=50
Среда С++ Builder. Кстати Builder отличается свойством -если поменять пару операторов и не сделать Rebuild а нажать на кнопку Run -то может быть сбой в правильной проге.
int CL2(float R,float *HX, float * HY)
{
int N,i,j,k,kmax=0; float hx,hy,step;
N=50;step=1./N;
for (i=0;i<N+1;i++) {
hy=i*step;
for (j=0;j<N+1;j++)
{
hx=j*step; k=CL21(R,hx,hy);
if(k>kmax) {kmax=k; *HX=hx; *HY=hy;};
}
}
k=CL21(R,*HX,* HY);
return kmax;
}Решение задачи: «Floating point overflow»
textual
Листинг программы
int CL2(float R,float *HX, float * HY)
{
int N, i, j, k, kmax = 0;
float hx, hy, step;
N = 50;
step = 1. / N;
for (i = 0; i < N + 1; i++)
{
hy = i * step;
for (j = 0; j < N + 1; j++)
{
hx = j * step;
k = CL21 (R, hx, hy);
if(k > kmax)
{
kmax = k;
*HX = hx;
*HY = hy;
}
}
}
k = CL21(R, *HX, *HY);
return kmax;
}
Объяснение кода листинга программы
- Объявлены пять переменных: N, i, j, k, kmax.
- N = 50;
- Определён шаг (step) равный 1.0 / N;
- Первый цикл for (i = 0; i < N + 1; i++) используется для создания значений hy от 0 до 1.0 с шагом 0.01.
- Второй цикл for (j = 0; j < N + 1; j++) используется для создания значений hx от 0 до 1.0 с шагом 0.01.
- Внутри второго цикла вызывается функция CL21(R, hx, hy);
- Результат функции CL21 сравнивается с kmax;
- Если результат функции CL21 больше kmax, то обновляются значения kmax, hx и hy;
- Второй цикл завершается;
- Вызывается функция CL21(R, HX, HY);
- Функция возвращает kmax;
- Возвращаемое значение функции присваивается k.