【发布时间】:2023-03-04 08:42:01
【问题描述】:
我想为嵌入式应用程序从 math.h 切换到 cmath。我对从 math.h 切换到 cmath lib 有点怀疑,因为这个嵌入式系统对计算精度的变化非常敏感。所以我想知道 cmath 是否借用了它的实现并包装了 c++ 兼容代码?还是 c++ 有它自己的实现与不同的实现?
【问题讨论】:
-
这取决于实现(编译器和库)。我还没有看到任何提及具有
<math.h>和<cmath>的任何实现以影响数值精度的方式表现不同(当然,假设使用相同的选项进行编译 - 某些编译器确实具有更改浮点表示的选项) . -
看起来像您在询问 cmath 是否使用 math.h 的 X-Y 问题,但实际上担心在嵌入式系统中使用 cmath 的后果。
-
cmath 只是 math.h 的 C++ 替代语法。在制定 ISO 标准的平行宇宙中,90 年代初的一些预言家预测未来的操作系统不会有文件扩展名。因此,这个平行宇宙中的标准委员会试图从 C++ 中删除
#include <lib.h>。所以 C 标准库必须包含在#include <clib>中。如果这对您来说似乎是一件非常愚蠢的事情,那是因为它是一件非常愚蠢的事情。 30 年后,操作系统仍然有文件扩展名...... -
@Lundin :我认为标准头文件中 .h 的省略早于 ISO 标准化。 Stroustrup 对此进行了解释。文件扩展名意味着文件,而实现可能具有“内置”库函数并使用 include 指令作为“开关”以使函数可用而无需实际读取文件。 IE。并不是操作系统可能没有文件扩展名,而是“标题”不必是文件。我并不是说这个理由很有说服力,只是说它不像你所说的那样考虑不周。