Page 2 of 2

Re: 203 - Running Lights Visibility Calculator

Posted: Thu Oct 30, 2014 12:21 am
You define EPSILON but never use it. To compare floating point numbers:
Instead of a == b, fabs(a - b) <= EPS
Instead of a < b, a < b - EPS
Instead of a <= b, a <= b + EPS

http://floating-point-gui.de/

Re: 203 - Running Lights Visibility Calculator

Posted: Thu Oct 30, 2014 2:04 am
Hi, thanks for that.

Do I also add the Epsilon conditions for the lights? I've done it for the conditional statements which are relevant in the computational stuff. Adding it to determine the lights messes my outputs up.

Is there anything wrong with the algorithm for determining the lights? I feel like that is where I'm going wrong, although I match the sample outputs.

Code: Select all

``````Accepted at last!
``````

Re: 203 - Running Lights Visibility Calculator

Posted: Fri Oct 31, 2014 8:02 pm
In my AC code I add EPS = 1e-7 every time I print a floating point number. I also check that I never print 360.00
Here are the other parts of my code where I use EPS

Code: Select all

``````      if(s[i].dist > 10.0 + EPS)
printf("Lights not visible\n");
else if(s[i].bearing >= 360.0 - EPS || s[i].bearing <= 0.0 + EPS)
else if(s[i].bearing > 0.0 + EPS && s[i].bearing < 2.5 - EPS)
else if(s[i].bearing >= 2.5 - EPS && s[i].bearing <= 110.0 + EPS)
else if(s[i].bearing > 110.0 + EPS && s[i].bearing < 115.0 - EPS)
else if(s[i].bearing >= 115.0 - EPS && s[i].bearing < 180.0 - EPS)
else if(s[i].bearing >= 180.0 - EPS && s[i].bearing <= 245.0 + EPS)
else if(s[i].bearing > 245.0 + EPS && s[i].bearing < 250.0 - EPS)
else if(s[i].bearing >= 250.0 - EPS && s[i].bearing <= 357.5 + EPS)
else if(s[i].bearing > 357.5 + EPS && s[i].bearing < 360.0 - EPS)
...
if(s[i].dist <= 10.0 + EPS && s[i].dist_after_3_min < s[i].dist - EPS && bearing_diff(s[i].bearing, s[i].bearing_after_3_min) <= 2.0 + EPS)
printf("** Collision warning
``````

Re: 203 - Running Lights Visibility Calculator

Posted: Sat Nov 01, 2014 8:04 am
That's so helpful. Thanks! Could you clarify how you handled the epsilon when displaying floating point numbers? I finally found a test case where my program and uDebug (your solution) outputs different values:

Code: Select all

``````Gotcha!
2
Ownship
0.0 0.0 0.0 1.0
ShouldBe1.01
1.005 0.0 111.1 2.2
ShouldBe1.02
1.015 0.0 222.2 2.3
``````
This is my output (which is wrong, apparently)

Code: Select all

``````Scenario: Gotcha!

Boat ID         Bearing      Distance   Lights (left to right)
---------------------------------------------------------------
***************************************************************
``````
And the output of uDebug is:

Code: Select all

``````Scenario: Gotcha!

Boat ID         Bearing      Distance   Lights (left to right)
---------------------------------------------------------------
***************************************************************
``````
Thanks!

Re: 203 - Running Lights Visibility Calculator

Posted: Tue Nov 04, 2014 12:12 am
Here are some more sections of my AC code:

Code: Select all

``````      char st[100];
sprintf(st, "%.2lf", s[i].bearing + EPS);
if(!strcmp(st, "360.00"))
strcpy(st, "0.00");
printf("%s ", st);
...
printf("%.2lf", s[i].dist + EPS);
``````
FYI, http://www.udebug.com/UVa/203 is not my code.

Re: 203 - Running Lights Visibility Calculator

Posted: Tue Nov 04, 2014 2:19 am
Finally! Accepted after a lot of frustration! Oh my goodness, sharing with me where you put those EPSILONs really, really, really, really helped!!!

Thank you so much brianfry713! I can't thank you enough!

Re: 203 - Running Lights Visibility Calculator

Posted: Tue May 12, 2015 12:07 pm
Input

Code: Select all

``````Test
1
Ownship
0 0 0 0
Ship
-10 0 90.00001 0.0001``````
Output

Code: Select all

``````Scenario: Test

Boat ID         Bearing      Distance   Lights (left to right)
---------------------------------------------------------------
Ship               0.00       10.00     Green Red Masthead
** Collision warning -->Ship:  [b]Distance =  10.00[/b]
***************************************************************
``````
Look out with the double space before the 10.00.

Re: 203 - Running Lights Visibility Calculator

Posted: Tue Dec 13, 2016 1:46 pm
I'm doing this problem in Python3. My code's output is identical to the "Accepted Output" for the two test data sets in udebug (https://www.udebug.com/UVa/203) yet it still gets a "wrong answer" from UVA. I suspect it still has something to do with the EPS and/or the rounding of output values but I'm at a loss regarding how to debug it further.

Any help appreciated!

Thanks, Peter