看看这段代码.10/3返回3.333333 2538 604736328125000当我在calcutor中乘以3得到9.99,但如果通过代码做同样的话我得到10.00.怎么可能?
#include <stdlib.h>
#include <stdio.h>
int main() {
float v = 10.f/3.f;
float test = v*3.f;
printf("10/3 => %25.25f \n (10/3)*3 => %25.25f\n",v,test);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是没有printf的汇编代码,使用默认的gcc 7.2.1参数编译:
0000000000400497 <main>:
400497: 55 push rbp
400498: 48 89 e5 mov rbp,rsp
40049b: f3 0f 10 05 b1 00 00 movss xmm0,DWORD PTR [rip+0xb1] # 400554 <_IO_stdin_used+0x4>
4004a2: 00
4004a3: f3 0f 11 45 fc movss DWORD PTR [rbp-0x4],xmm0
4004a8: f3 0f 10 4d fc movss xmm1,DWORD PTR [rbp-0x4]
4004ad: …
Run Code Online (Sandbox Code Playgroud)