C数学库的源代码是什么?

What is the source code for C math library?

提问人:dasman 提问时间:11/8/2023 最后编辑:dasman 更新时间:11/9/2023 访问量:103

问:

我刚刚开始在 macOS 上尝试 C 编程,看起来它使用 NVIDIA 库进行数学运算。它是闭源的吗?

以下代码在我的 M1 Mac 上编译和运行

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

int main(int argc, char **argv){

    if(argc == 1){
        printf("no args \n");
        return -1;
    }
    double x = atof(argv[1]);

    printf("log of %f is %f", x, log(x));
    return 0;
}

enter image description here

在IDE中,当我搜索日志如何实现的定义时,它把我带到了这个:

__DEVICE__ float logf(float __a) {
  return __FAST_OR_SLOW(__nv_fast_logf, __nv_logf)(__a);
}

但是我无法看到运行以计算日志的实际代码enter image description here

C macOS 数学

评论

2赞 Allan Wind 11/8/2023
通常,它位于 libc 中(即 Linux 上的 glibc)。我建议你标记你的平台,你也有与你的源代码相对应的文件名吗?除非您使用的是 cuda,否则我不会期望这里有 nvidia 代码。
1赞 Robert Dodier 11/8/2023
在网络上搜索“__FAST_OR_SLOW(__nv_fast_logf, __nv_logf)(__a);”会发现一些结果——似乎与Clang有关。我想如果你点击其中一些链接,你可能会找到源代码。
2赞 Simon Goater 11/8/2023
确保 #include < math.h> 并使用 -lm 进行编译。
0赞 dasman 11/9/2023
我已经编辑并添加了详细信息,它是一个带有 VS 代码的 M1 mac
3赞 Eric Postpischil 11/9/2023
Apple 对标准 C 库数学例程使用自己的实现,所以我怀疑 Nvidia 的引用是否正确。您的 IDE 可能引导您走上了一条花园小径。由于对编译时预处理器标识符定义的潜在复杂依赖关系,IDE 可能无法导航平台标头的包含。很久以前,苹果的英特尔处理器数学库的源代码是开源的,可以在 opensource.apple.com 获得,但ARM进程的新代码不是。可以在调试器中检查程序集/机器代码。

答: 暂无答案