Recommended Posts

I posted a while ago asking about this. I've had a hunt online and found something which a few others here may like - took me long enough, so I don't want to leave you all stuck like I almost was - went fixed point only to realise it was a bit of a fail in certain situations.
Streflop seemed to be my solution. A friend of mine I'm working on the project with noticed it is used by TA Spring. (link missed as it seemed to miss half my post)
Thats the solution to the problem we had - keeping all clients in game totally in sync - its an RTS so sending across every units position was not a good solution for us.
Anyone else found any other neat solutions?
[Edited by - Richy2k on June 30, 2008 7:58:47 AM]

Link to post

Share on other sites

Share this post

Link to post

Share on other sites

As long as you stick to a single compiler, and a single CPU instruction set, it is possible to make floating point fully deterministic. The specifics vary by platform (i e, different between x86, x64 and PPC).

0

Share this post

Link to post

Share on other sites

Original post by hplus0603As long as you stick to a single compiler, and a single CPU instruction set, it is possible to make floating point fully deterministic. The specifics vary by platform (i e, different between x86, x64 and PPC).

I've already tested this, and it isn't always the case. Same exe, different machines. My Athlon x2 matches my friends Core Duo 2 - but I considered myself lucky in that case. Had the same problem with networking at work too - was remoting another another machine with a different CPU to mine and getting different results with the same inputs. The differences were very tiny - but there.

I'd be interested to know which compiler settings to use to make it actually work though [smile] one less dependancy then!

Share this post

Link to post

Share on other sites

That means it's a problem with the exe. You have to make sure that the internal precision is set to 64 bits (not 80, because only Intel implements that), and that the rounding mode is consistent. Furthermore, you have to check this after calls to external DLLs, because many DLLs (Direct3D, printer drivers, sound libraries, etc) will change the precision or rounding mode without setting it back.

Also, you can't use SSE or SSE2 for floating point, because it's too under-specified to be deterministic.