为什么浮点数字3.14f由LLVM中的64位值0x40091EB860000000表示?

时间:2017-05-02 02:27:42

标签: llvm

#include <stdlib.h>
#include <stdio.h>

const float PI = 3.14f;
//const float PI = 3.14;

float getPI() {
  return PI;
}

int main() {
  printf("%d\n", sizeof(float));
  return 0;
}

sizeof(float)是4.但在LLVM字节码中,3.14f由64位双0x40091EB860000000表示。

@PI = constant float 0x40091EB860000000, align 4

; Function Attrs: noinline nounwind uwtable
define float @getPI() #0 {
entry:
  ret float 0x40091EB860000000
}

1 个答案:

答案 0 :(得分:0)

来自LLVM Language Reference

  

浮点常数浮点常数使用标准小数   符号(例如123.421),指数符号(例如1.23421e + 2)或a   更精确的十六进制表示法(见下文)。 汇编程序需要   浮点常数的精确十进制值。例如,   汇编程序接受1.25但拒绝1.3,因为1.3是重复   二进制十进制。浮点常量必须具有浮点   类型。

  

使用十六进制形式时,类型的常量为half,float和   double使用上面显示的16位数字表示(其中   匹配IEEE754表示为double);