0

In the output returned from the program below, why does LOOP2 give a false when comparing 70 <=70 and 90<=90 (which should actually be true) , and end that particular iteration block of LOOP2 to move on to the next iteration block stead? Also, why doesn't this happen at the ending of the other iteration blocks like 10<=10, 80<=80, 100<=100 ? Please see the highlighted parts in the output. Any thoughts would be appreciated.

#include <iostream>
#include <cstdlib> 
using namespace std;
int main()
{   float rates[5]={0.1, 0.7, 0.8, 0.9, 1};
    float x;
    cout<<"Enter no. of events"<<endl;
    cin>>x; cout<<endl;

    float i=1;
    for(int m=0;m<5;m++)        //LOOP1
    {   for(;i<=((rates[m])*x);i++)         //LOOP2 to generate 'x' no. of events
        {   cout<<"i = "<<i<<"\t"<<"check against "<<((rates[m])*x)<<""<<endl;
        }
    }
    return (0);
}

Enter no. of events
100

i = 1   check against 10
i = 2   check against 10
i = 3   check against 10
i = 4   check against 10
i = 5   check against 10
i = 6   check against 10
i = 7   check against 10
i = 8   check against 10
i = 9   check against 10
***i = 10   check against 10***
i = 11  check against 70
i = 12  check against 70
i = 13  check against 70
i = 14  check against 70
i = 15  check against 70
i = 16  check against 70
i = 17  check against 70
i = 18  check against 70
i = 19  check against 70
i = 20  check against 70
i = 21  check against 70
i = 22  check against 70
i = 23  check against 70
i = 24  check against 70
i = 25  check against 70
i = 26  check against 70
i = 27  check against 70
i = 28  check against 70
i = 29  check against 70
i = 30  check against 70
i = 31  check against 70
i = 32  check against 70
i = 33  check against 70
i = 34  check against 70
i = 35  check against 70
i = 36  check against 70
i = 37  check against 70
i = 38  check against 70
i = 39  check against 70
i = 40  check against 70
i = 41  check against 70
i = 42  check against 70
i = 43  check against 70
i = 44  check against 70
i = 45  check against 70
i = 46  check against 70
i = 47  check against 70
i = 48  check against 70
i = 49  check against 70
i = 50  check against 70
i = 51  check against 70
i = 52  check against 70
i = 53  check against 70
i = 54  check against 70
i = 55  check against 70
i = 56  check against 70
i = 57  check against 70
i = 58  check against 70
i = 59  check against 70
i = 60  check against 70
i = 61  check against 70
i = 62  check against 70
i = 63  check against 70
i = 64  check against 70
i = 65  check against 70
i = 66  check against 70
i = 67  check against 70
i = 68  check against 70
i = 69  check against 70
***i = 70   check against 80***
i = 71  check against 80
i = 72  check against 80
i = 73  check against 80
i = 74  check against 80
i = 75  check against 80
i = 76  check against 80
i = 77  check against 80
i = 78  check against 80
i = 79  check against 80
***i = 80   check against 80***
i = 81  check against 90
i = 82  check against 90
i = 83  check against 90
i = 84  check against 90
i = 85  check against 90
i = 86  check against 90
i = 87  check against 90
i = 88  check against 90
i = 89  check against 90
***i = 90   check against 100***
i = 91  check against 100
i = 92  check against 100
i = 93  check against 100
i = 94  check against 100
i = 95  check against 100
i = 96  check against 100
i = 97  check against 100
i = 98  check against 100
i = 99  check against 100
***i = 100  check against 100***
aeon
  • 83
  • 6
  • 3
    Possibly because you are comparing with a `float` and there may be rounding errors. Use some `epsilon` when comparing floats. – vsoftco Feb 24 '17 at 11:20
  • I ran your program on http://cpp.sh/ and couldn't reproduce the issue. –  Feb 24 '17 at 11:21
  • Because LOOP2 stops at `i<=((rates[m])*x)` which is 70, increases m and than checks 70 against 80 – Aeonos Feb 24 '17 at 11:22
  • Updated the code with the same data types for `rates[]`, `i`, and `x`. This time the changes in comparison results were alternative, and I'm still unable to figure it out. – aeon Feb 24 '17 at 11:59
  • @OlivierGrech I tried the same on cpp.sh and it gave me the expected results. I'm using eclipse CPP neon.2 with the mingw (GCC) compiler. Any thoughts on correcting the behaviour ? – aeon Feb 24 '17 at 12:12

0 Answers0