一个浮点数相加不正确的问题

今天遇到一个问题:

 float CurTime = FApp::GetCurrentTime();
 UE_LOG(LogGame, Warning, TEXT("%3.2f"), CurTime);
 CurTime += 1;
 UE_LOG(LogGame, Warning, TEXT("%3.2f"), CurTime);

结果两个数值的打印 有时相同, 有时结果相差2

看汇编 也没什么问题

000007FEB7EB9B37 movss xmm0,dword ptr [CurTime]
000007FEB7EB9B3D addss xmm0,dword ptr [__real@42c80000 (07FEB7F7BAB0h)]
000007FEB7EB9B45 movss dword ptr [CurTime],xmm0

1个小时后的结论是: GetCurrentTime() 返回的是double型.
应该是 double 赋值给 float 时, float的指数位用完了,所以加另一个浮点数时, 只取整数部份(大于1时, 小数部分进1)
随着时间增长,有一天,这个结果会是”有时数值相同,有时结果相差4″

Leave a Reply

Your email address will not be published. Required fields are marked *