为什么没有标准的C++数学库<math>而不是C包装器<cmath>?
Why isn't there a standard C++ math library <math> instead the C wrapper <cmath>?
C++标准引入了新的API,同时保持与C API的兼容性。C 包装器的标头以"c"开头,例如
我的问题是,为什么STL不提供新的数学库,即使旧的C API中存在许多缺陷。缺陷包括但不限于:C API 使用"f"、"l"和"ll"前缀来声明不同类型的函数,而C++可能会重载、缺少 pi 和 e 等常量。
C的<math.h>
有一个C++标准库版本:它是<cmath>
。<cfoo>
标头不仅仅是带有 std
命名空间中名称的<foo.h>
包装器。它们使用一些C++功能,例如函数重载,并且可以具有更多功能。例如,<cmath>
有一堆特殊的数学函数
考虑std::abs
.在<cmath>
中,有int
、long
和long long
以及float
、double
和long double
的重载。
<cmath>
是 C++ 的标准库标头,它从 C 标头<math.h>
扩展而来,并带有命名空间std
。
自 17 C++以来,特殊数学函数从 TR1 和线性插值函数 (C++ 20( 合并到标准中,这些函数包含在标题<cmath>
。
一些数学函数包含在<numeric>
中,例如 constexpr 函数 gcd
、lcd
和 midpoint
(从 C++ 20 开始(。
量在第 20 C++添加,这些常数包含在名为 <numbers>
的单独标头中,并包含在命名空间 std::numbers
中。
从标准数学库中仍然可以找到一些缺陷,其中包括由于与 C 的向后兼容性而导致的函数重载的不一致,并且一些数学概念包含在单独的标头中。
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- EASTL矢量<向量<int>>连续的
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 什么是模板&lt;&gt;inline bla bla
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- eigen :: llt&lt;eigen :: matrixxd&gt;具有不完整的类型
- 错误,包括&lt; ctype&gt;在原子上使用C 11
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 是std :: set&lt; std :: future&gt;不可能存在
- 是numeric_limits&lt; int&gt; :: is_modulo从逻辑上矛盾
- opencv 2.4.7在iOS错误背景_segm.hpp #include&lt; list&gt;未找到
- 在修改列表后,std :: list&lt; t&gt; :: end()的值是否会更改
- ///<评论></评论>在Visual Studio中