用二进制表示39.5和39.50有区别吗?浮点数计算有什么缺点?
用二进制表示39.5和39.50是一样的。如下代码中,39.5和39.50都由.LC0
处4个字节表示。
浮点数计算有截断误差,所以判断两个浮点数是否相等时,不能直接用==
比较,而应该采用绝对误差或相对误差来判断。
int main()
{
float a = 39.5;
float b = 39.50;
}
main:
push rbp
mov rbp, rsp
movss xmm0, DWORD PTR .LC0[rip]
movss DWORD PTR [rbp-4], xmm0
movss xmm0, DWORD PTR .LC0[rip]
movss DWORD PTR [rbp-8], xmm0
mov eax, 0
pop rbp
ret
.LC0:
.long 1109262336