I have a function that will calculate a random point on a circle based on a specified radius and total number of points. The only point in question is the first point. I get different values when the code compiles in Release and Debug mode.

Here is some code:

Vector2f getPoint(uint index)
{
                
        static const(float) pi = 3.141592654f;
                
        float angle = index * 2 * pi / m_pointCount - pi / 2;

                
        float x = cos(angle) * m_radius;
        float y = sin(angle) * m_radius;
                

        return Vector2f(m_radius + x, m_radius + y);
}

Vector2f is simply a struct that has 2 floats.

In debug mode this works as expected. Let's say the radius is 50. getPoint(0) returns a vector that prints X: 50 Y: 0. For some reason, the same function will return a vector that prints X: 50 Y: 4.77673e-14. Now, 4.77673e-14 is a crazy small number that might as well be 0, but why the difference?

Also, consider the following change in the function:

Vector2f getPoint(uint index)
{
                
        static const(float) pi = 3.141592654f;
                
        float angle = index * 2 * pi / m_pointCount - pi / 2;

        
        float x = cos(angle) * m_radius;
        float y = sin(angle) * m_radius;

        Vector2f temp = Vector2f(m_radius + x, m_radius + y);
                
        return temp;
}

Surprisingly, when calling getpoint(0), this will return a Vector2 that will print X: 50 Y: 0 even in Release mode.

Again, it's probably not that big of a deal since 4.77673e-14 is so small, but I'm curious about this. Anyone wanna shed some light on this?

Reply via email to