8得票1回答
constexpr - 函数不能在常量表达式中使用

我希望在编译时计算一个数学函数在给定范围内的查找表,然后在运行时从表中检索值。我的代码如下: #include <iostream> #include <cmath> template<int size> class LookupTable { pub...

20得票1回答
std::numeric_limits::quiet_NaN()与std::nan()与NAN之间的区别 (注意:这是一个提问标题,不需要回答)

我对于C++的几种表示quiet NaN值的设施感到惊讶。我发现有三种标准方法: std::numeric_limits<T>::quiet_NaN() - 通用方式,我认为这是被选中的方式 std::nan、std::nanf、std::nanl - 一组接受const ch...

7得票2回答
如何避免使用临时变量来实现std::modf函数?

最近我遇到了一个问题,使用MSVC编译时出现了段错误,而在GCC中没有出现。 经过数小时的研究,我发现我的版本的MSVC不支持以下语法: double value = 3.4; double fractional = std::modf(value, nullptr); 我不希望/在意...

12得票1回答
GCC C++ pow 精度问题

我参加了一场计算比赛,发现了一个奇怪的bug。pow(26,2)总是返回675,有时候是674?即使正确答案是676。这种错误也会在pow(26,3),pow(26,4)等操作中出现。 比赛后进行了一些调试,我认为问题与int向下取整有关。有趣的是,在以前从未遇到过这种错误。我的计算机在Win...

54得票7回答
如何正确地获得(-1)^n?

许多算法需要计算(-1)^n(其中n为整数),通常作为序列中的因子。也就是说,这个因子对于奇数n为-1,对于偶数n为1。在C++环境中,常常可以看到以下代码:#include<iostream> #include<cmath> int main(){ int n ...

28得票5回答
C++中的数字四舍五入

我正在尝试让我的程序分别向上和向下四舍五入一个数字。 例如,如果数字是3.6,那么我的程序应该将其四舍五入到最近的数字4,如果数字是3.4,则应将其舍入为3。 我尝试使用ceil库来获取3个项目的平均值。 results = ceil((marks1 + marks2 + marks3)...

10得票2回答
在 cmath 中实现 pow() 函数及高效替代方法

我读过cmath通过执行exp(b*log(a))来计算pow(a,b)。当b是整数时,不应使用它,因为它会大大减慢计算速度。在以下情况下有哪些替代方案: 计算大量连续的使用相同常量a的pow() 事先已知b将肯定是整数? 我正在寻找在这些特定场景下高效快速的替代方案。

67得票4回答
重载调用abs(double)模糊不清

我有以下的C++代码:#include <math.h> #include <cmath.h> // per http://www.cplusplus.com/reference/clibrary/cmath/abs/ // snip ... if ( (...

14得票14回答
如何解决在C++中,sin(M_PI)不等于0的问题?

在C++中,const double Pi = 3.14159265; cout << sin(Pi); // displays: 3.58979e-009 它应该显示数字零。 我知道这是因为Pi被近似了,但是有没有办法让我在程序...

11得票3回答
标准库中常见的数学函数为什么不是“常量表达式”?

由于某种原因,clang++(但不是 g++) 抱怨:constexpr double invdecayf1m(double x) { return -log1p(-x); } 告诉我non-constexpr function 'log1p' cannot be used in a co...