On 21 August 2012 09:47, Johannes Brunen
Now I have some questions: 1. Is it known that this mapping into the realm of 32Bit is happening for the above cast operation? 2. Is this a compiler bug? The generated assembler code does not allow 'safe' casting into 64bit integer? 3. Any advice how I should handle this situation?
This is certainly surprising. I'll need to look into it some more, but the best course is probably to use a different technique for hashing floats with Visual C++. I'm already directly hashing the binary representation of floating point numbers on cygwin, so could probably do the same for Visual C++, it'll also be a bit quicker. I'm a bit surprised this wasn't caught by the unit tests. Can you try running the hash unit tests? They're at 'libs/functional/hash/test' - especially 'hash_float_test.cpp' and 'hash_long_double_test.cpp'.