相关疑难解决方法(0)

寻找math.h函数的纯c版本(没有协处理器支持)

我必须使用静态验证C源的一些(半)自动验证软件(CBMC (链接)).支持浮点,但没有所有数学函数的定义.尝试检查是否可以用它来检查数字软件.

所以我需要这些功能.我在找一些math.h没有协处理器使用的定义(例如sqrt,pow,其余部分tan; int/ float/ double).

当我在一些Linux发行版附带的libc(也许现在是eglibc)中查找它时,我总是达到一个点,其中有一些处理器内在函数意味着硬件sqrt函数.

第1部分:搜索软件实现

我需要的是一个支持数学函数的库,具有以下特征:

  • 支持IEEE浮点数,但纯粹基于整数运行的库也会很棒,也许更好.
  • 正确性是一个关键因素.(隐藏在某些来源的特殊情况的已知错误并不那么酷).根据IEEE-754(例如sqrt的规则),结果也应该是正确的.
  • 不使用协处理器调用.纯软件.C是首选,但asm也应该没问题.

到目前为止,我搜索了各种libc实现,特别是有关嵌入式系统的实现.我认为这些库中的大多数都是针对编译程序的可移植性和大小,但很难说它们是否使用特定于处理器的指令.

  • **fdlibm乍一看似乎有一些纯软件定义.我会进一步检查.但是在源代码中提到了一些错误(代码不是标准的).
  • **newlib似乎带来了相同的定义(基于sun microsystems的代码).但是我现在不能肯定地说这些软件版本是否总是被使用,所以可能会有一些我目前看不到的协处理器调用(参见第2部分).
  • **uClibc似乎与newlib共享特征.

第2部分:了解这些实现的结构

  • 有人能给我一些关于这些数学库结构的简短介绍.他们如何调度各种版本(例如特定的协处理器)?

  • 这些不同前缀在文件名中的含义是什么?e_sqrt.c,k_sin,s_sin

我会很高兴听到一些图书馆这可能是对我有用.我宁愿选择一个库,但是当它有必要时,也可以寻找一些单一的函数实现并构建一个小型库.我不会使用math.h中定义的所有函数.

这个这个 SO帖子都说Java Math Implementation是基于fdlibm的,这听起来这个库是可行的.有关这个库的更多信息的人我应该知道吗?

似乎我有很多可能性,包括以下两个:

  1. 使用glibc并在软件模式下编译.问题是,我不能使用任何自动系统检查工具(在configure中).我必须手动提供所有信息.是否有任何标志禁止使用fp-coprocessor并禁止simd操作?fp-without应该是一个开头,然后如果编译它也使用soft-float.我希望编译过程或多或少依赖于主机的特定决策(如arm ......).
  2. 使用fdlibm(目前首选).问题:如何将程序链接到它?我需要像assert这样的非libm函数,但想要链接我的fdlibm而不是安装的system-libm(所以-nodefaultlibs将禁止使用assert).

c libc math.h uclibc newlib

2
推荐指数
1
解决办法
1550
查看次数

Intel x86_64 汇编,如何在 x87 和 SSE2 之间移动?(计算双精度数的反正切)

我尝试计算双精度浮点值的反正切,该值保存在 xmm 寄存器中。对于正常的浮点,可以使用旧的 x87 指令 FPATAN,但是如何使用 double 来做到这一点?

precision assembly x86-64 intel

2
推荐指数
1
解决办法
1222
查看次数

math.sin/cos/tan是否使用查找表?

我正在开发一个需要快速访问sin/cos/tan值的应用程序.数学提供的值是否可以预先计算或计算?

lua

1
推荐指数
1
解决办法
348
查看次数

三角函数:如何在不使用“math”模块的情况下编写正弦和余弦函数的代码?

我一直在为我为 Discord Bot 制作的模块编写代码。我一直在尝试不使用任何模块,因为它对导入东西没有帮助。所以我想我应该自己为他们两个写代码。

这里的问题是我真的不知道我们如何制作它们。我在网络上的任何地方都找不到它们,因为到处都只看到使用了math我不想使用的模块。

我不知道如何与他们合作,所以我需要一些帮助。

谢谢你!:)

python trigonometry python-3.x

0
推荐指数
1
解决办法
155
查看次数

为什么numpy的正弦函数在某些点上如此不准确?

我刚检查过它numpysine功能.显然,它会在pi周围产生非常不准确的结果.

In [26]: import numpy as np

In [27]: np.sin(np.pi)
Out[27]: 1.2246467991473532e-16
Run Code Online (Sandbox Code Playgroud)

预期的结果是0.为什么numpy那么不准确?

在某种程度上,我不确定将计算结果视为不准确是否可接受:它的绝对误差在一个机器epsilon(对于binary64)内,而相对误差是+inf- 我觉得有些困惑的原因.任何的想法?

[编辑]我完全理解浮点计算可能不准确.但是大多数浮点库可以设法在一小部分误差范围内提供结果.这里,相对误差是+ inf,这似乎是不可接受的.想象一下,我们想要计算

1/(1e-16 + sin(pi)) 
Run Code Online (Sandbox Code Playgroud)

如果我们使用numpy的实现,结果将是灾难性的错误.

python floating-point numpy

-3
推荐指数
1
解决办法
618
查看次数