Исключение с плавающей точкой в ​​C ++ - PullRequest
3 голосов
/ 15 февраля 2011

Я получаю исключение с плавающей запятой в своем коде, но не могу разобраться. Я не знаю, в чем проблема. Не очень хорош в программе на C ++ и просто изучает приведенные формулы. Пожалуйста, помогите мне:

Программа:

#include<iostream.h>
#include<conio.h>
#include <stdlib.h>

void main()
{
    clrscr();
    int a,b,c,d,ctr,j,Q=1,K=1 ;
    float q0=0.7, p = 0.5 ;
    int phe[3][3];
    double dist[3][3] , mem[3][3],exp[3][3],eplt[3][3], rnd;
    cout<<"enter the iterations, cities , ants ";
    cin>>a>>b>>c;
    for (int i=0;i<3;i++)
    {
        for (j=0;j<3;j++)
        {
            dist[i][j]=(double)rand()/(double)RAND_MAX;
            if (i==j)
            dist[i][j]=0;
        }
    }
    for (i=0;i<3;i++)
    {
        for (j=0;j<3;j++)
        {
            cout<< dist[i][j]<<"\t";
        }
        cout<<"\n";
    }

    cout<<"pheromone matrix "<<endl;
    for (i=0;i<3;i++)
    {
        for (j=0;j<3;j++)
        {
            if (i==j)
                phe[i][j]=0;
            else
                phe[i][j]=1;
        }
    }

    for ( i=0;i<3;i++)
    {
        for ( j=0;j<3;j++)
        {
            cout<< phe[i][j]<<"\t";
        }
        cout<<"\n";
    }

    cout<< "after iteration "<<endl;
    for (i=0;i<3;i++)
    {
        ctr=0;
        for (int k=0;k<3;k++)
        {
            // mem[i][k]=(rand()%b)+1;
            // cout<<"memory"<<mem[i][k]<<"\n";
            rnd= (double)rand()/(double)RAND_MAX;
            cout<<"hhhhhhh"<<rnd;
            if (rnd<=q0)
            {
                cout<<"Exploitation\n";
                eplt[i][ctr] =(p*phe[i][k])+(Q/K);  
            }
            else
            {
                cout<<"EXPLORATION\n";
                eplt[i][ctr]= phe[i][k]/dist[i][k];
            }
            ctr++;
        }
    }
    for (i=0;i<3;i++)
    {
        for (int k=0;k<3;k++)
        {
            cout <<eplt[i][k]<<"\t";
        }
        cout<<"\n";
    }
    getch();
}

Я получаю сообщение об ошибке после первого цикла после завершения "после итерации". Это вывод:

введите итерации, города, муравьи 3 4 4

0 0,003967 0,335154 0,033265 0 0,2172 0,536973 0,195776 0

матрица феромона 0 1 1 1 0 1 1 1 0

после итерации hhhhhhh0.949919EXPLORATION Ошибка с плавающей точкой: Домен. Аварийное завершение программы

Ответы [ 2 ]

5 голосов
/ 15 февраля 2011

На первый взгляд: вы звоните на линию

eplt[i][ctr]= phe[i][k]/dist[i][k];

с i = 0 и k = 0?После инициализации dist [0] [0] = 0, и вы получите деление на ноль исключения.

3 голосов
/ 15 февраля 2011

Я думаю, что эта строка (сразу после cout<<"EXPLORATION\n";:

eplt[i][ctr]= phe[i][k]/dist[i][k];

является проблемой. Когда i == k, тогда dist [i] [k] == 0.0.

...