草庐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++数组问题

我想初始化一个大小为200的double组,它的值是从0到199,在C++中从索引0到199。我知道我可以通过一个简单的For循环来完成,但是有没有办法像这样初始化double组?谢谢 最佳答案 不是真的。for循环是您的最佳选择:doublearray[200];for(inti=0;i(i); 关于C++数组问题,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/3243762/

c++ - 为什么我会随机出现段错误?

这对我来说很奇怪,但是当我启动我的程序时遇到了意外的随机段错误。有时它可以工作,有时它会崩溃。Dev-C++的调试器将我指向文件的一行:STL_construct.h/***@ifmaint*Constructsanobjectinexistingmemorybyinvokinganallocated*object'sconstructorwithaninitializer.*@endif*/templateinlinevoid_Construct(_T1*__p,const_T2&__value){//_GLIBCXX_RESOLVE_LIB_DEFECTS//402.wrongne

c++ - AVX、SSE 总和比 gcc 自动向量化慢

我有一个奇怪的现象,无法真正解释。我正在尝试编写一些数字代码,从而对一些实现进行基准测试。我只是想用SSE和AVX以及gcc自动矢量化来对一些vector加法进行基准测试。为了测试这一点,我使用并修改了下面的代码。代码:#include#include#include"../../time/timer.hpp"voidser(double*a,double*b,double*res,intsize){for(inti(0);i对于计时和计算的GFLOP/S,我得到:./test3AVX1892ms0.338266GFLOP/sSSE408ms1.56863GFLOP/sSER396ms

c# - 将 C# 函数指针传递到 C++/CLI 互操作 dll

我正在尝试将一个函数指针从C#传递到C++/CLI,并收到一个Windows编译器错误,指出此语言(C#)不支持ManagedTakeCallback函数——我定义了C++/CLI互操作中的ManagedTakeCallback。我的代码看起来像C#应用程序:namespaceManagedConsoleApplication{classCallback{publicdelegatedoubleDelegateAdd(doublevalue1,doublevalue2);publicstaticdoubleCallbackAdd(doublevalue1,doublevalue2){r

c++ - 从字符串到数字大于 std::numeric_limit<double>::digits10 的 double 的转换

std::stringstr="12345679012.124678";doubleback=boost::lexical_cast(str);std::stringstr2=boost::lexical_cast(back);//herestr2isequaltostr即使数字的有效数字大于std::numeric_limit::digits10(即15),此处也没有丢失(即最终字符串=原始字符串)是否正常? 最佳答案 是的,这很正常。std::numeric_limit::digits10指的是确保强制转换无损的最大位数。这并不

c++ - 为什么 g++ 声明某些 valarray<double> o 有 "no matching function for call cbegin(o)"?

请考虑以下代码:usingcustom_t=std::valarray;custom_to;unsignedacc=std::accumulate(std::cbegin(o),std::cend(o),0);g++-5说Nomatchingfunctionforcalltocbegin(custom_t&)如果我改用std::begin(o)和std::end(o),一切正常。这是编译器错误吗?代码使用VisualStudio2015编译。 最佳答案 这是一个libstdc++错误,我刚刚创建了https://gcc.gnu.or

C++:在编译时确定给定整数类型的整数转换等级?

在我正在进行的项目中,我有一个数据结构可以存储各种类型的数字,并且需要保证不会意外丢失精度/信息。因为标准C++允许隐式发生一些有损转换,所以我创建了一个类型特征,用于确定我将允许哪些转换并禁止那些我不喜欢使用SFINAE的转换。我意识到我的做法存在一个微妙的问题。这是一段代码摘录://Ifitisbetweentwofloatingpointtypes,notruncationisallowed.templatestructsafe_numeric::value&&std::is_floating_point::value)>::type>{staticconstexprboolva

c++ - 从 C 代码调用具有复杂参数和复杂返回类型的 C++ 函数

我有一个C++数学库并用Rust编写了一个项目。由于无法直接从Rust调用C++,但可以调用C,因此我决定编写一个从C++到C的标准包装器。除具有复杂参数的函数外,一切都或多或少地按预期工作,其中虚部由于某种原因丢失。下面我提供mwe。export_c++.h#ifdef__cplusplus#includestd::complexfoo(conststd::complexa);#endif#ifdef__cplusplusextern"C"{#endif#includedouble_Complexc_foo(constdouble_Complexa);#ifdef__cplusplu

c++ - 在 C++ 中创建对三元运算符结果的 const 引用是否安全?

这段代码中发生了一些不明显的事情:floata=1.;constfloat&x=true?a:2.;//Note:`2.`isadoublea=4.;std::coutclang和gcc输出:4,1人们会天真地期望相同的值被打印两次,但事实并非如此。这里的问题与引用无关。有一些有趣的规则规定了的类型?:。如果两个参数的类型不同并且可以转换,则它们将使用临时对象。引用将指向的临时值?:。上面的示例编译正常,并且在使用-Wall编译时可能会或可能不会发出警告,具体取决于您的编译器版本。下面是一个例子,说明在看起来合法的代码中出错是多么容易:templateconstT&min(constI