问题标签 [libm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python-3.x - 通过在 python 3 中导入 libm 来改变舍入模式
我的环境:Ubuntu 18.04、Anaconda、Python 3.6
我正在使用以下代码通过 ctypes 在 python 中导入 libm,以更改浮点类型环境,例如舍入。
但是我收到以下错误:
libm 是 ubuntu 18.04 附带的默认库。
您能否建议导入库的最佳方法是什么?
谢谢你。
performance - 是否有任何可靠的数据可用于基准数学库?
我将测试一些数学函数的性能,如 pow、exp 和 log 等。有没有可靠的测试数据?
由于这些功能在现有的现代系统库(如 glibm 或 OpenJDK)中进行了高度优化,一般随机输入可能会导致快速收敛,或触发一些短路径。
perl - 如果 Perl 已经链接到 libm,为什么没有任何功能向用户公开?
Perl 已经链接到libm
.
因此,如果 Perl 已经链接到libm
,为什么不经常使用诸如ceil
、和 s 之类的功能floor
并pow
提供为CORE::GLOBAL
s 或在另一个命名空间中提供?为什么perldoc -q ceil
将指向POSIX.pm
作为这个函数的来源,为什么Math::Libm
甚至存在?
当您使用模块中可用的符号运行时, Python 还链接到libm
向用户公开的链接,并且可以从外部引用,例如import math
math
math.ceil(num)
perl - 当共享库已经映射到进程空间时,是否可以编写 XS 模块?
这是在我所知道的范围内,请在此处纠正任何混淆。在这个问题中,我问为什么由libm
Perl 接口提供的功能尚未向用户公开。现在我想知道它是如何完成的。
CPAN 上有一个声称可以这样做的模块,称为Math::Libm
. 这很好用,但是当我使用它时,作为一个关于实现的问题,我发现不仅 libm 映射到进程中,就像 Debian 上任何正在运行的 Perl 解释器一样,
但Math::Libm
也映射到另一个 libm 共享对象中,
这似乎是因为Autoloader
加载了外部共享对象。
是否可以在不加载外部共享对象的情况下访问驻留进程中已经存在的符号?
raspberry-pi - 在 armhf 中没有实现 __fpclassify
我正在使用 ARM 的10.3-2021.07 GCC 工具链对 Raspberry Pi 4B 进行交叉编译(特别是这个文件未压缩到ARMGCC
. 我还使用最新的 Raspberry OS映像作为 sysroot(循环安装到RPISYSROOT
)。主机是 Windows 主机上的 Ubuntu Xenial VM。
使用此编译行时(为便于阅读而编辑,CFLAGS
灵感来自 Pi's /proc/cpuinfo
、gentoo和GNU):
我收到以下错误:
我看到了__fpclassify
in和 Raspberry Pi 的工具ARMGCC
git repo 的使用,它们似乎都是相同文件的所有迭代:RPISYSROOT
(路径可能略有不同)。但是,这些都没有提供__fpclassify
. libm
我认为,这似乎是其中的一部分,现在已经有libc
一段时间了。我已经将libc安装到RPISYSROOT
.
我发现的唯一实现来自uCLibc,但我不认为混合 libc 实现是一个好主意。
另外,由于 Raspberry Pi 是 armhf,我应该看到这些错误吗?
c - libm中缺少架构arm64?
我使用现有的 Makefile 将一个小工具从 Linux 移植到 x86 上的 MacOS。现在,我需要构建一个通用应用程序,因为一些用户拥有 M1 硬件。
我已按照 Apple 关于构建通用应用程序的说明,并在我的 Makefile 中添加了一个新目标:
gcc -g -o arm -target arm64-apple-macos10.12 ar.o -lm
但是,ld 抱怨缺少 arm 64 位于 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/libm.tbd 中。
有任何想法吗?
请不要建议使用 Xcode,因为项目的另一部分正在使用 flex 和 bison,并且其他人在使用这两个时报告了 Xcode 中的错误。
gcc - 升级 libc/libm 后浮点不一致
我最近将我的操作系统从 Debian 9 升级到 Debian 11。我有一堆服务器运行模拟,一个子集产生特定结果,另一个子集产生不同结果。这在 Debian 9 中不会发生。我制作了一个最小的失败示例:
lp 值在每台机器上打印相同的答案,但我对 ap 有两个不同的答案:101293.33662281210127 和 101293.33662281208672
代码是用“gcc fptest.c -lm -O0”编译的。刚刚添加了“-O0”以确保优化不是问题。如果没有此选项,它的行为相同。
Debian 11 版本中链接的库是 libm-2.31.so 和 libc-2.31.so。
在(工作的)Debian 9 版本中链接的库是 libm-2.24.so 和 libc-2.24.so。
这些服务器都使用不同的 CPU 运行,因此很难说太多。但是例如,我在至强 E5-2695 v2 和至强 E5-2695 v3 之间得到了不同的结果。
在我拥有的所有处理器中,我在 Debian 11 上只看到这两个结果之一,而在 Debian 9 上运行时,我始终只得到一个结果。
对我来说,这感觉就像 libm-2.31 和/或 libc-2.31 中的错误。我对这种事情的经验为零。有人可以解释一下我所看到的是否是预期的吗?它看起来像一个错误吗?我能做些什么吗?等等
还尝试用clang编译,并得到完全相同的问题。
另请注意,在 Debian 9 上编译的二进制文件在 Debian 11 上运行,并产生与 Debian 11 二进制文件相同的结果/问题,这进一步加重了我对库相关的怀疑(我无法在 Debian 9 上运行 Debian 11 二进制文件)。
更新
只需阅读这篇很有帮助的帖子。所以我很高兴不同的架构可能会为 exp() 函数提供不同的结果。但是我所有的处理器都是 x86_64 和某种 intel xeon-xxxx。我不明白为什么具有完全相同库的完全相同的二进制文件在不同的处理器上给出不同的结果。
正如那篇文章中所建议的,我使用 %a 打印了这些值。这两个答案仅在 LSB 上有所不同。如果我使用 expl() 我在所有机器上都会得到相同的答案。
解释为什么我会看到差异,如果这是预期的,那就太好了。任何确保一致性的编译器标志也很好。