Floating point 如何使用LLVM获取/计算FLT_MAX和FLT_EPSILON等值?

Floating point 如何使用LLVM获取/计算FLT_MAX和FLT_EPSILON等值?,floating-point,llvm,llvmlite,Floating Point,Llvm,Llvmlite,如果我的代码为可能不同于当前运行的平台的平台生成LLVM SSA,我如何获得FLT_MAX或FLT_EPSILON(或双精度或任何其他浮点宽度的相同值) 一般来说,为我自己的系统获取这些值并使用它们是不正确的。将问题委托给clang或gcc也是不可接受的解决方案 生成LLVM代码时,我如何知道为FLT_MAX发出什么值?FLT_MAX/FLT_EPSILON是特定于C/C++的实体,不与LLVM连接。因此,您需要借助C/C++编译器来派生它。或者,您需要保留支持的平台列表,并为每个支持的平台硬编

如果我的代码为可能不同于当前运行的平台的平台生成LLVM SSA,我如何获得
FLT_MAX
FLT_EPSILON
(或双精度或任何其他浮点宽度的相同值)

一般来说,为我自己的系统获取这些值并使用它们是不正确的。将问题委托给
clang
gcc
也是不可接受的解决方案


生成LLVM代码时,我如何知道为
FLT_MAX
发出什么值?

FLT_MAX
/
FLT_EPSILON
是特定于C/C++的实体,不与LLVM连接。因此,您需要借助C/C++编译器来派生它。或者,您需要保留支持的平台列表,并为每个支持的平台硬编码这些值。

FLT\u MAX
/
FLT\u EPSILON
是特定于C/C++的实体,不与LLVM连接。因此,您需要借助C/C++编译器来派生它。或者,您需要保留支持的平台列表,并为每个支持的平台硬编码这些值。

我不需要这些,但我使用和常量的定义生成了其他常量。LLVM然后将我的常量表达式折叠为一个简单的常量。很可能您的目标(以及您的开发机器)使用IEEE-754浮点类型。LLVM还支持其他任何东西吗?因此,您可以只查找该值,并将其写入十六进制浮点。@NateEldredge如果LLVM的FloatType和DoubleType在所有平台上都保证为IEEE754 32和64位,这可能会奏效。我不需要这些,但我已经使用和该常量的定义生成了其他常量。LLVM然后将我的常量表达式折叠为一个简单的常量。很可能您的目标(以及您的开发机器)使用IEEE-754浮点类型。LLVM还支持其他任何东西吗?因此,您可以只查找该值,并可能将其写入十六进制浮点。@NateEldredge如果LLVM的FloatType和DoubleType在所有平台上都保证为IEEE754 32和64位,那么这可能会奏效。我相信OP使用
FLT_MAX
FLT_EPSILON
作为它们提供值的概念的占位符,而不是它们的特定语言定义。换句话说,OP想知道如何引用LLVM IR中浮点格式的最大浮点值和所谓的“epsilon”精度度量。我相信OP使用
FLT_MAX
FLT_epsilon
作为它们提供值的概念的占位符,而不是它们的特定语言定义。换句话说,OP想知道如何在LLVM IR中引用浮点格式的最大浮点值和所谓的“epsilon”精度度量。