I have found the mismatch in the result of some complex calculations. When i thoroughly observed the intermediate results, its the std::pow function which creates that misma
You used literals of type double, not long double (you forgot the suffix). This means when you wrote 2.7182818284589998 (an impossible value for a double), the compiler had to choose between 2.718281828458999793696193592040799558162689208984375 and 2.71828182845899934960698374197818338871002197265625,
and when you wrote -0.21074699576017999 (another impossible value for a double), the compiler had to choose between -0.2107469957601799948054832611887832172214984893798828125 and -0.210746995760179967049907645559869706630706787109375.
With default rounding to nearest, the values you stored in dvalue and dexp were 2.718281828458999793696193592040799558162689208984375 and -0.2107469957601799948054832611887832172214984893798828125 (storing a double in a long double does not change its value)
The result of pow should be close to 0.8099789690729650165287354526069381795064774873497553965297999359066924950079080502973738475702702999114990234375, which then has to be placed in the return type, in your case should be long double (except that MSVC doesn’t distinguish them from double, as far as I recall and as your results show)
placing the result in a 64-bit double, we have to choose between 0.80997896907296496049610823320108465850353240966796875 and 0.80997896907296507151841069571673870086669921875.
The correct answer (rounding to nearest) is 0.80997896907296507151841069571673870086669921875 and that is exactly what you got in the "32bit result", truncated as 0.80997896907296507.
Your "64bit result" appears to be exactly the other 64-bit double value, rounded the wrong way from the correct result (and truncated as 0.80997896907296496). I would consider that a QoI bug: gcc, clang, intel, and oracle all give the only one, correct, result (even though they don't have to: IEEE precision requirements for pow allow more than 0.5 ulp of error)
incidentally, if your pow returned an Intel 80-bit long double, it would have to fit between 0.8099789690729650164951504420773886749884695746004581451416015625 and 0.809978969072965016549360550701663896688842214643955230712890625, with the latter being the nearest.