我必须使用静态验证C源的一些(半)自动验证软件(CBMC (link))。支持浮点,但没有所有数学函数的定义。尝试检查是否可以用它来检查数值软件。
所以我需要这些功能。 我正在寻找一些没有使用协处理器的math.h
定义(例如sqrt
,pow
,余数,tan
; {{1} } / int
/ float
)。
当我在一些linux发行版附带的libc(也许现在是eglibc)中查找它时,我总是达到一个点,其中有一些处理器内在函数意味着硬件sqrt函数。例如。
我需要的是一个支持具有以下特征的数学函数的库:
到目前为止,我搜索了各种libc实现,特别是有关嵌入式系统的实现。我认为这些库中的大多数都是针对编译程序的可移植性和大小,但很难说它们是否使用特定于处理器的指令。
有人可以简单介绍一下这些数学库的结构。他们如何调度各种版本(例如特定的协处理器)?
文件名中这些不同前缀的含义是什么? double
,e_sqrt.c
,k_sin
?
我很高兴听到一些可以对我有用的库。我宁愿选择一个库,但是当它有必要时,也可以寻找一些单一的函数实现并构建一个小型库。我不会使用math.h中定义的所有函数。
This和this SO帖子说Java Math Implementation是基于 fdlibm ,这听起来这个库是可行的。有关这个库的更多信息的人我应该知道吗?
似乎我有很多可能性,包括以下两个:
答案 0 :(得分:5)
在glibc/sysdeps/ieee754中有一个完整的IEEE-754软件实现。编译库时,它可能会自动替换某个函数的体系结构特定版本(例如ia64/fpu/e_acosf.S
),但整个库也是用软件实现的。