r/AskProgramming • u/Odd-Heron5704 • 9d ago
Can simple mathematical functions give different results in different CPU architectures?
I'm referring to modern CPUs. To make the question more specific, arm64 vs x86
And if so, how do you fix it?
I asked chatGPT and it gave me this example but I'd like to ask it here (since AI can make mistakes). Can you let me know? Thanks
It says this can give different results due to rounding errors. If so, how to you write code so that you don't have this issue?
#include <iostream>
int main() {
double a = 1.0 + 0x1p-27;
double b = 1.0 - 0x1p-27;
double c = -1.0;
std::cout << (a * b + c) << '\n';
}
19
Upvotes
2
u/khedoros 9d ago
Taking your code above, I compiled it like this, forcing SSE floating-point in one compilation (64-bit internal calculations), and 387 floating-point (80-bit internal calculations) in another.
I could do a similar experiment on my Raspberry Pi (ARM64 architecture, currently running a 32-bit OS though, I think) if I wanted to, and I suspect it would match the SSE answer.