草庐IT

c++ - pow(x, 0.5f) 的快速实现是否比快速 sqrt(x) 更快?

我想知道是否可以快速执行pow(),例如thisone,比快速sqrt(x)更快地获得整数的平方根。我们知道sqrt(x)=pow(x,0.5f)我无法自己测试速度,因为我没有找到sqrt的快速实现。我的问题是:pow(x,0.5f)的快速实现是否比快速sqrt(x)更快?编辑:我的意思是powf-pow需要float而不是double。(double更具误导性) 最佳答案 关于C标准库sqrt和pow,答案是否。首先,如果pow(x,.5f)比sqrt(x)的实现更快,负责维护sqrt的工程师将用pow(x,.5f)。其次,商业库

c++ - 为什么 std::equal 比两个小 std::array 的手卷循环慢得多?

我正在分析一小段代码,它是大型模拟的一部分,令我惊讶的是,STL函数equal(std::equal)比简单的for循环慢得多,比较两个数组元素元素。我写了一个小测试用例,我认为这是两者之间的公平比较,使用Debian文件库中的g++6.1.1的区别并非微不足道。我正在比较两个有符号整数的四元素数组。我测试了std::equal、operator==和一个小的for循环。我没有使用std::chrono来确定确切的时间,但是可以通过时间./a.out明确地看出差异。我的问题是,给出下面的示例代码,为什么operator==和重载函数std::equal(我相信它调用operator==

c++ - 为什么 C++ 程序会为局部变量分配比最坏情况下所需更多的内存?

灵感来自thisquestion.显然在下面的代码中:#includeint_tmain(intargc,_TCHAR*argv[]){if(GetTickCount()>1){charbuffer[500*1024];SecureZeroMemory(buffer,sizeof(buffer));}else{charbuffer[700*1024];SecureZeroMemory(buffer,sizeof(buffer));}return0;}使用VisualC++10以默认堆栈大小(1兆字节)编译并优化(/O2)时发生堆栈溢出,因为程序试图在堆栈上分配1200KB。当然,上面的

c++ - std::deque 在末尾插入是否比 std::vector 快?

我开始比较:插入列表的前面插入vector的后面插入双端队列的前端但后来我注意到,即使在push_back()上,双端队列似乎也更快。我一定是做错了某事,我无法相信更通用的容器会优于特定的容器。我的代码使用谷歌基准测试:#include"benchmark/benchmark.h"#include#include#defineNUM_INS1000staticvoidBM_InsertVector(benchmark::State&state){std::vectorv;v.reserve(NUM_INS);while(state.KeepRunning()){state.PauseT

c++ - 为什么函数参数在调用堆栈上比返回地址更早推送?

来自http://en.wikipedia.org/wiki/Stack_pointer#Structure我想知道为什么一个函数的返回地址放在该函数的参数之上?将ReturnAddress在ParametersforDrawline之前压入堆栈更有意义,因为当ReturnAddress弹出以返回调用函数。首选上图中显示的实现的原因是什么? 最佳答案 返回地址通常通过call机器命令推送,[在native语言中是instructionset]而参数和变量是通过编译器创建的多个机器命令推送的。因此,返回地址是调用者推送的最后一个东西,

具有比 CPU 慢的快速 GPU 的 C++ AMP

我刚刚开始学习C++AMP,并且获得了一些使用VS2012RC构建的示例,但我发现GPU的性能比CPU慢。例如,KateGregory的示例:http://ampbook.codeplex.com/releases/view/90595(与她即将出版的书http://www.gregcons.com/cppamp/有关)。在我观看的一次讲座中,她展示了它们,她通过使用笔记本电脑的GPU(我相信她说的是6650)与CPU(不确定她使用的是什么CPU)相比,将第4章示例的性能提高了约5倍。我已经尝试自己测试示例并在几个系统配置(如下所示)上我总是发现CPU更快。我还测试了其他示例并发现相同

c++ - std::this_thread::sleep_for sleep 时间比 VS2015 中的预期短

让我们有以下一段代码,它简单地测量以20毫秒调用的std::this_thread::sleep_for的持续时间:#include#include#includeusingnamespacestd;usingnamespacestd::chrono;intmain(){for(inti=0;ielapsed=end-start;cout当使用工具集v120(VS2013)编译运行时,我得到了预期的结果,即:Waited20.0026msWaited20.0025msWaited20.0025msWaited20.0026msWaited20.0025msWaited20.0025ms

C++ 计算比 double 或 long double 更精确

我正在自学C++和thispracticequestion它要求编写可以将PI计算为>30位的代码。我了解到double/longdouble在我的电脑上都是16位数字。我认为这个问题的教训是能够计算出超出可用范围的精度。因此,我该怎么做?可能吗?我现在计算Pi的代码是#include"stdafx.h"#include#include#includeusingnamespacestd;intmain(){doublepi;pi=4*atan(1.0);cout输出到16位和pi到30位比较如下。3.14159265358979313.1415926535897932384626433

c++ - 为什么使用 std::multiset 作为优先级队列比使用 std::priority_queue 更快?

我尝试用std::priority_queue替换std::multiset。但我对速度结果感到失望。算法运行时间增加50%...相应的命令如下:top()=begin();pop()=erase(knn.begin());push()=insert();我对priority_queue的实现速度感到惊讶,我期待不同的结果(对PQ更好)...从概念上讲,多重集被用作优先级队列。为什么优先级队列和多重集有如此不同的性能,即使使用-O2?十个结果的平均值,MSVS2010,WinXP,32位,方法findAllKNN2()(请参见下文)MSNtime[s]1000000.510000008

.net - 在游戏开发和 VirtualBox 等应用程序方面,C++ 比 .NET 有什么优势

这是对我之前提出的问题的重新措辞尝试。我想知道为什么C++似乎是某些胖客户端应用程序的首选语言。我能想到的最简单的例子是视频游戏和我最喜欢的应用程序VirtualBox。请不要关闭这篇文章,我只是想了解为什么会这样。 最佳答案 作为从事AAA游戏的专业游戏开发者,我可以告诉您。第一个原因是C++,C可以在任何平台上编译和运行,比如PS3或NDS。下一代平台制造商只提供强大的C库来与硬件接口(interface)。这背后的原因是C和C++是免费的,不属于一家公司,因为它们是为接近金属的低级编程而设计的。这意味着游戏开发者需要了解形成反