I wrote a small program to compute the Euclidean norm of a 3-coordinate vector. Here it is:
#include
#include
#include
There is a difference in precision of a floating point number depending on where it is stored. If the compiler keeps one variable in a register, it has higher precision as a variable stored in memory. You can try to force your variables to be stored in memory before, like:
int main()
{
std::array arr = { 4.0, -2.0, 6.0 };
volatile double v1 = norm(arr);
volatile double v2 = norm(arr);
std::cout << v1 - v2 << '\n';
}
This gives you the expected result of 0.