Floating point overflow - C (СИ)

Узнай цену своей работы

Формулировка задачи:

число написанных мной программ на С перевалило 100 но с таким впервые Непонятное исключение на операторе step=1./N - выдает переполнение и исключение
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;
}
Этот код в -h файле. Никаких одноименных переменных N нигде кроме как здесь нет. В отладчике видно N=50 Среда С++ Builder. Кстати Builder отличается свойством -если поменять пару операторов и не сделать Rebuild а нажать на кнопку Run -то может быть сбой в правильной проге.

Решение задачи: «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;
}

Объяснение кода листинга программы

  1. Объявлены пять переменных: N, i, j, k, kmax.
  2. N = 50;
  3. Определён шаг (step) равный 1.0 / N;
  4. Первый цикл for (i = 0; i < N + 1; i++) используется для создания значений hy от 0 до 1.0 с шагом 0.01.
  5. Второй цикл for (j = 0; j < N + 1; j++) используется для создания значений hx от 0 до 1.0 с шагом 0.01.
  6. Внутри второго цикла вызывается функция CL21(R, hx, hy);
  7. Результат функции CL21 сравнивается с kmax;
  8. Если результат функции CL21 больше kmax, то обновляются значения kmax, hx и hy;
  9. Второй цикл завершается;
  10. Вызывается функция CL21(R, HX, HY);
  11. Функция возвращает kmax;
  12. Возвращаемое значение функции присваивается k.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.5 из 5