草庐IT

c++ - cos返回错误值?

我对cmath/math.h的标准cos函数有一个奇怪的问题。显然在某些情况下它会返回一个错误的值或只是未定义的值。#include#includeintmain(){doublefoo=8.0*0.19634955;//1.5707964doublebla=std::cos(foo);//shouldbe0.9996242168245std::cout例如,如果cos的输入值为1.5707964,则cos返回-7.32051e-008(使用double时,float为-4.XYZe-009)。我是否遗漏了一些非常基本和简单的东西...? 最佳答案

c++ - 无法在 Solaris 10 上使用 GCC 5.5 包含 cmath

我正在尝试使用gcc5.5.0在我的Solaris10sparc机器上运行以下测试程序#include#includeintmain(){std::cout这是操作系统的详细信息,~$uname-aSunOSsovms5775.10Generic_147147-26sun4vsparcSUNW,SPARC-Enterprise-T5220~$cat/etc/releaseOracleSolaris101/13s10s_u11wos_24aSPARCCopyright(c)1983,2013,Oracleand/oritsaffiliates.Allrightsreserved.Asse

c++ - 如何在 Boost.Lambda 中使用 <cmath> 中的函数?

我尝试使用其他一些算术运算(不在代码中)将vectorv的所有元素转换为它们的对数值。我如何使用Boost.Lambda来实现这一目标?正如我所说,还有更多的算术运算,所以带有Boost.Bind的表达式对我不起作用(太复杂、太长、不可读)。我也不想使用C++11lambda。但是……它会改变什么吗?我的代码是这样的:#include#include#includevoidtestLambda(){usingnamespaceboost::lambda;std::vectorv;v.push_back(1);v.push_back(2);v.push_back(3);std::tran

c++ - 使用 cmath 的 fmod (C++) 时的不一致

我在使用fmod函数时得到了一些非常困惑的结果。以下代码:doublex=pow(142,35);doubley=fmod(x,221);std::cout输出:2.13842e+75206但是当对x值进行硬编码时:doublex=pow(142,35);doubley=fmod(2.13842e+75,221);std::cout输出更改为:2.13842e+7514我不知道这是什么原因,它在我的程序中产生了一些难看的错误。任何见解将不胜感激。提前致谢。 最佳答案 所以当我像这样输出第一个结果时:std::cout我看到了这个:2

c++ - 为什么 cmath 不使用模板和/或重载

TR1在C++11中引入的许多新函数都有丑陋的类C签名。例如,引用Boost的TR1文档(http://www.boost.org/doc/libs/1_52_0/doc/html/boost_tr1/subject_list.html#boost_tr1.subject_list.special)://[5.2.1.1]associatedLaguerrepolynomials:doubleassoc_laguerre(unsignedn,unsignedm,doublex);floatassoc_laguerref(unsignedn,unsignedm,floatx);longd

c++ - constexpr 替换数学常量,如 M_PI

有没有C++11constexpr常量可以用来代替中的常量宏,即像M_PI这样的常量和friend?或者缺少它,任何全局const在运行时提供这些常量的值? 最佳答案 C++标准库中没有定义预定义的constexpr或全局常量。但是您可以自己定义它们,例如:namespaceMathConstants{constdoubleE=2.71828182845904523536;constdoubleLOG2E=1.44269504088896340736;constdoubleLOG10E=0.434294481903251827651

c++ - <cmath> 函数在 C++17 中必须是 `noexcept` 吗?

这个问题在这里已经有了答案:AreC++standardlibraryimplementationsallowedtostrengthennoexceptspecifications?(1个回答)关闭3年前。在优化代码的某些部分时,我决定检查是否可以将某些方法声明为noexcept,这归结为我对中的数学函数的不完整了解.所以,我决定检查是否sin()和asin()(作为示例)我正在使用的实际上是noexcept.static_assert(noexcept(asin(1)));static_assert(noexcept(sin(1)));成功通过,所以他们实际上是noexcept。我

c++ - cmath header 混淆

数学函数的命名空间是什么?全局还是std?考虑cos功能。它有3个重载。但也有来自math.h的遗留cos。C对函数重载一无所知。因此cos(x)无法解析为cos(float)。解决方案是显式调用单精度版本cosf(x)。我错过了什么吗? 最佳答案 通过包含可以获得相同的功能和在C++中,唯一的区别是命名空间。IE。包括也会给你带来过载。理论上,在C++03中,使用在使用时为您提供在全局命名空间和std命名空间中定义的符号为您提供在std命名空间中而不是在全局命名空间中定义的符号。实践是不同的,C++0X使理论与实践保持一致。在使用

c++ - 如何避免在 std::modf 中使用临时变量?

我最近遇到了一个问题,我在MSVC中遇到了段错误,而在GCC中却不会。几小时后我意识到我的MSVC版本显然不支持以下语法:doublevalue=3.4;doublefractional=std::modf(value,nullptr);我不想/关心数字的全部部分。是的,我知道我可以做“3.4-3.0”之类的,但我担心以这种方式专门使用modf。目前我只能通过以下方式看到这样做:doubletemp;doublevalue=3.4;doublefractional=std::modf(value,&temp);有没有办法绕过这个临时变量? 最佳答案

c++ - GCC 中 cmath 的 pow() 的正确性

代码[GCC,使用-O2标志编译]intmain(){vector>matrixa(8);intff=5;ints=pow(ff,matrixa.size());intss=pow(double(ff),int(matrixa.size()));vector>comb(s);cout输出5^8=390624390625我想知道为什么s=390624而它应该是390625。如果我在没有-O2标志的情况下编译代码,则s=390625。此外,ss的转换似乎可以解决此问题。这是怎么回事?我的操作系统是Windows7Ultimatex64。不确定GCC版本,它带有Code::Blocks10.