信息发布软件,b2b软件,广告发布软件

 找回密码
 立即注册
搜索
查看: 4736|回复: 14
打印 上一主题 下一主题

[『C++图文教程』] 一个不能有误差的高精度算法C++绝对是一个能信任的能手

[复制链接]

1916

主题

1926

帖子

1万

积分

积分
11218
跳转到指定楼层
宣传软件楼主
发表于 2017-6-22 23:07:56 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

软件教程首图:

软件教程分类:C++ 图文教程 

软件图文教程视频教程分类:软件图文教程 

软件教程难易程度:软件中级教程 

软件教程发布日期:2017-06-22

软件教程关键字:一个不能有误差的高精度算法C++绝对是一个能信任的能手

① 本信息收集于网络,如有不对的地方欢迎联系我纠正!
② 本信息免费收录,不存在价格的问题!
③ 如果您的网站也想这样出现在这里,请您加好友情链接,我当天会审核通过!

④友情链接关键字:软件定制网站 网址:http://www.postbbs.com

软件教程详细描述
//C++高精度实现计算程序运行时间
#include <iostream>     
#include <windows.h>     
using namespace std;     
   
void Test()//测试程序   
{   
    for(int i=0; i<1000; i++)   
    {      
        for(int j=0; j<100; j++)   
        {   
            printf("%d,%d\n",i,j);   
        }      
    }   
}   
   
int main(void)     
{     
    LARGE_INTEGER BegainTime ;     
    LARGE_INTEGER EndTime ;     
    LARGE_INTEGER Frequency ;     
    QueryPerformanceFrequency(&Frequency);     
    QueryPerformanceCounter(&BegainTime) ;     
   
    //要测试的代码放在这里   
    Test();   
   
    QueryPerformanceCounter(&EndTime);   
   
    //输出运行时间(单位:s)   
    cout << "运行时间(单位:s):" <<(double)( EndTime.QuadPart - BegainTime.QuadPart )/ Frequency.QuadPart <<endl;     
   
    system("pause") ;     
    return 0 ;     
}



附 vc计算高精度时间差


面线框里的代码便可实现计算精度达到微秒级的时间差:
------------------------------------------------------------------------------------
LARGE_INTEGER litmp;
LONGLONG QPart1,Qpart2;
double dfMinus,dfFreq,dfTime;

//获得计时器的时钟频率
QueryPerformanceFrequency(&litmp);
dfFreq = (double)litmp.QuadPart;
QueryPerformanceCounter(&litmp);
Qpart1 = litmp.QuadPart; //开始计时

Block1(); //工作模块 函数等,根据自己需要添加。

QueryPerformanceCounter(&litmp);
Qpart2 = litmp.QuadPart; //终止计时
dfMinus = (double)(QPart2 - QPart1);//计算计数器值
dfTime = dfMinus / dfFreq;//获得对应时间,单位为秒 你可以乘1000000精确到毫秒级(us)
--------------------------------------------------------------------------------------
在一些计算机硬件系统中,包含有高精度运行计数器(high-resolution   performance   
counter),利用它可以获得高精度定时间隔,其精度与CPU的时钟频率有关。   
   
1、首先调用QueryPerformanceFrequency函数取得高精度运行计数器的频率f。单位是每秒多少次(n/s),此数   
一般很大。   
2、在需要定时的代码的两端分别调用QueryPerformanceCounter以取得高精度运行计数器的数值n1,n2。两次数   
值的差值通过f换算成时间间隔,t=(n2-n1)/f。   
   
下面举一个例子来演示这种方法的使用及它的精确度。   
   
在VC   6.0   下用MFC建立一个对话框工程,取名为HightTimer.在对话框面板中控件的布局如下图:   
   
   
其中包含两个静态文本框,两个编辑框和两个按纽。上面和下面位置的编辑框的ID分别为IDC_E_TEST和IDC_E_ACT   
UAL,通过MFC   ClassWizard添加的成员变量也分别对应为DWORD   m_dwTest和DWORD   m_dwAct.   
“退出”按纽的ID为IDOK,“开始测试”按纽ID为IDC_B_TEST,用MFC   
ClassWizard添加此按纽的单击消息处理函数如下:   
   
void   CHightTimerDlg::OnBTest()     
{   
//   TODO:   Add   your   control   notification   handler   code   here   
UpdateData(TRUE);   //取输入的测试时间值到与编辑框相关联的成员变量m_dwTest中   
   
LARGE_INTEGER   frequence;//LARGE_INTEGER是一个联合,其中LOWPART为低32位,HIGHPART为高32位,   
//两者构成一个结构,而QuadPart是其中的64位符号整数,为LongLong类型   
if(!QueryPerformanceFrequency(   &frequence))   //取高精度运行计数器的频率,若硬件不支持则返回FALSE   
MessageBox("Your   computer   hardware   doesn't   support   the   high-resolution   performance   counter",   
"Not   Support",   MB_ICONEXCLAMATION   |   MB_OK);     
   
LARGE_INTEGER   test,   ret;   
test.QuadPart   =   frequence.QuadPart   *   m_dwTest   /   1000000;   
//通过频率换算微秒数到对应的数量(与CPU时钟有关),1秒=1000000微秒   
//test   中存储着m_dwTest毫秒所需的次数   
ret   =   MySleep(   test   );   //调用此函数开始延时,返回实际花销的数量   
   
m_dwAct   =   (DWORD)(1000000   *   ret.QuadPart   /   frequence.QuadPart   );   //换算到微秒数   
   
UpdateData(FALSE);   //显示到对话框面板   
}   
   
其中上面调用的MySleep函数如下:   
   
LARGE_INTEGER   CHightTimerDlg::MySleep(LARGE_INTEGER   Interval)   
///////////////////////////////////////////////////////////////////////////////////////////////////   
//////////   
//   功能:执行实际的延时功能   
//   参数:Interval   参数为需要执行的延时与时间有关的数量   
//   返回值:返回此函数执行后实际所用的时间有关的数量   
///////////////////////////////////////////////////////////////////////////////////////////////////   
////////   
{   
LARGE_INTEGER   privious,   current,   Elapse;   
   
QueryPerformanceCounter(   &privious   );   
current   =   privious;   
   
while(   current.QuadPart   -   privious.QuadPart   <   Interval.QuadPart   )   
QueryPerformanceCounter(   ¤t   );   
   
Elapse.QuadPart   =   current.QuadPart   -   privious.QuadPart;   
   
return   Elapse;   
}   
注:别忘了在头文件中为此函数添加函数声明。   
   
至此,可以编译和执行此工程了,当测试时间超过3微秒时,准确度已经非常高了,此时机器执行本身延时函数代码的时间对需要延时的时间影响很小了。   
   
上面的函数由于演示测试的需要,没有在函数级封装,下面给出的函数基本上可以以全局函数的形式照搬到别的   
程序中。   
   
BOOL   MySleep(DWORD   dwInterval)   
///////////////////////////////////////////////////////////////////////////////////////////////////   
//////////   
//   功能:执行微秒级的延时功能   
//   参数:Interval   参数为需要的延时数(单位:微秒)   
//   返回值:若计算机硬件不支持此功能,返回FALSE,若函数执行成功,返回TRUE   
///////////////////////////////////////////////////////////////////////////////////////////////////   
////////   
{   
BOOL   bNormal   =   TRUE;   
LARGE_INTEGER   frequence,   privious,   current,   interval;   
   
if(!QueryPerformanceFrequency(   &frequence))   
{   
::MessageBox(NULL,   "Your   computer   hardware   doesn't   support   the   high-resolution   performance   
counter",   
"Not   Support",   MB_ICONEXCLAMATION   |   MB_OK);   //或其它的提示信息   
return   FALSE;   
}   
   
interval.QuadPart   =   frequence.QuadPart   *   dwInterval   /   1000000;   
   
bNormal   =   bNormal   &&   QueryPerformanceCounter(   &privious   );   
current   =   privious;   
   
while(   current.QuadPart   -   privious.QuadPart   <   interval.QuadPart   )   
bNormal   =   bNormal   &&   QueryPerformanceCounter(   ¤t   );   
   
return   bNormal;   
}   
   
需要指出的是,由于在此函数中的代码很多,机器在执行这些代码所花费的时间也很长,所以在需要几个微秒的   
延时时,会影响精度。实际上,读者在熟悉这种方法后,只要使用QueryPerformanceFrequency和QueryPerforman   
ceCounter这两个函数就能按实际需要写出自己的延时代码了。   
   
   
   
给你个类吧,我在用呢   
   
//   Elapsed.h:   interface   for   the   CElapsed   class.   
//   
//////////////////////////////////////////////////////////////////////   
   
#if   !defined(AFX_ELAPSED_H__4A992E21_8B47_11D6_B1B2_FFFCE130B010__INCLUDED_)   
#define   AFX_ELAPSED_H__4A992E21_8B47_11D6_B1B2_FFFCE130B010__INCLUDED_   
   
#if   _MSC_VER   >   1000   
#pragma   once   
#endif   //   _MSC_VER   >   1000   
   
class   CElapsed      
{   
private:   
   int Initialized;   
   __int64 Frequency;   
   __int64 BeginTime;   
   
public:   
   BOOL   Avaliable();   
   double   End();   
   BOOL   Begin();   
   CElapsed();   
   virtual   ~CElapsed();     
};   
   
#endif   //   !defined(AFX_ELAPSED_H__4A992E21_8B47_11D6_B1B2_FFFCE130B010__INCLUDED_)   
   
   
   
//   Elapsed.cpp:   implementation   of   the   CElapsed   class.   
//   
//////////////////////////////////////////////////////////////////////   
   
#include   "stdafx.h"   
//#include   "myimage.h"   
#include   "Elapsed.h"   
   
#ifdef   _DEBUG   
#undef   THIS_FILE   
static   char   THIS_FILE[]=__FILE__;   
#define   new   DEBUG_NEW   
#endif   
   
//////////////////////////////////////////////////////////////////////   
//   Construction/Destruction   
//////////////////////////////////////////////////////////////////////   
   
CElapsed::CElapsed()   
{   
   Initialized=QueryPerformanceFrequency((LARGE_INTEGER   *)&Frequency);   
}   
   
CElapsed::~CElapsed()   
{   
   
}   
   
BOOL   CElapsed::Begin()   
{   
   if(!Initialized)   
    return 0;
   return   QueryPerformanceCounter((LARGE_INTEGER   *)&BeginTime);   
}
     
double   CElapsed::End()
{   
   if(!Initialized)   
    return 0;
   __int64   endtime;   
   QueryPerformanceCounter((LARGE_INTEGER   *)&endtime);   
   
   __int64   elapsed=endtime-BeginTime;   
   
   return   (double)elapsed/(double)Frequency;   
}     
BOOL   CElapsed::Avaliable()
{   
   return Initialized;   
}   

 解决一个问题通常有多种方法, 我们总想找到最高效的,所以需要对比不同算法执行所用的时间。可惜的是,C++中提供的方法一般只能精确到毫秒级。

  提供一种更加精确的方法。编写一个函数,可以在C++中这样写:

  __declspec (naked) unsigned __int64 GetCpuCycle( void )

  {

  _asm

  {

  rdtsc

  ret

  }

  }

  RDTSC的返回值存放在EDX EAX中, EDX为高32位,EAX为低32位。这里的 RDTSC 指令( Read Time Stamp Counter ), 获得CPU的高精度时间戳。

  这样以来我们就可以在随处获得当前的CPU自上电以来的时间周期数了:

  unsigned __int64 iCpuCycle = GetCpuCycle();

  根据这个数字我们可以计算出上电以来所经历的时间( 秒s ):

  second = iCpuCycle / CPU主频率( HZ );

  1GHZ = 1,000 MHZ = 1,000,000 KHZ = 1,000,000,000 HZ;

  获取两次作差就可以得到运行的时间了。其实没必要换算成时间,关注差值就行了。

  PS:

  可以放心一个unsigned __int64 不会溢出 - - 可以计算一下你的CPU能保存多少年的时间。。

  根据这一方法有几个好处: 一是精度高,二是函数调用开销最小,三是平台限制小,四是具有和CPU主频相对应的直接关系。。。 但是由于精度高,得到的数字浮动比较大。。


unto谁与争峰C++圆形算法无其它编辑能比的上吧next非常好用的商路通网信息发布软件
回复

使用道具 举报

0

主题

591

帖子

591

积分

积分
591
15#定制软件#
发表于 2017-7-22 00:28:48 | 只看该作者
很到位,做的速度也还行,技术服务配合也很到位。价格还算公道。好评吧

回复 支持 反对

使用道具 举报

0

主题

615

帖子

601

积分

积分
601
14#定制软件#
发表于 2017-7-19 07:58:43 | 只看该作者
不知该说些什么。。。。。。就是谢谢

回复 支持 反对

使用道具 举报

0

主题

615

帖子

589

积分

积分
589
13#定制软件#
发表于 2017-7-17 17:44:06 | 只看该作者
,一般般

回复 支持 反对

使用道具 举报

0

主题

660

帖子

654

积分

积分
654
12#定制软件#
发表于 2017-7-13 06:26:14 | 只看该作者
家,技术不错,售后服务也很好。

回复 支持 反对

使用道具 举报

0

主题

1002

帖子

1004

积分

积分
1004
11#定制软件#
发表于 2017-7-13 05:49:49 | 只看该作者
漂亮,高端大气上档次,大爱,服务态度也好,值得推荐的设计团队,希望生意会因此好一点!

回复 支持 反对

使用道具 举报

0

主题

1025

帖子

1027

积分

积分
1027
10#定制软件#
发表于 2017-7-13 02:15:32 | 只看该作者
沟通问题已经解决,客服晨曦服务态度比较好。就是线上沟通,有些困难。希望可以尽快完善。合作愉快

回复 支持 反对

使用道具 举报

0

主题

2181

帖子

2

积分

积分
2
9#定制软件#
发表于 2017-7-11 21:44:53 | 只看该作者
很好,服务也好,耐心细致,下次还会来的

回复 支持 反对

使用道具 举报

0

主题

584

帖子

578

积分

积分
578
8#定制软件#
发表于 2017-7-4 18:35:51 | 只看该作者
很好,服务也好,耐心细致,下次还会来的

回复 支持 反对

使用道具 举报

0

主题

587

帖子

579

积分

积分
579
7#定制软件#
发表于 2017-7-4 17:07:09 | 只看该作者
及时做出评价,系统默认好评!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关导读
群发软件JavaScript语法小示例
JavaScript语法小示例
群发软件展示JavaScript各种语句标识符的实际应用
展示JavaScript各种语句标识符的实际应用
群发软件AIWROK条件语句实用示例智能活动推荐系统
AIWROK条件语句实用示例智能活动推荐系统
群发软件AIWROK软件示例数组方法实战应用
AIWROK软件示例数组方法实战应用
群发软件示例JavaScript的 try-catch-finally-throw用法
示例JavaScript的 try-catch-finally-throw用法
群发软件JavaScript 高级错误处理实战示例
JavaScript 高级错误处理实战示例
群发软件安卓脚本AIWROK软件示例JS函数高级用法
安卓脚本AIWROK软件示例JS函数高级用法
群发软件AIWROK环境JavaScript编码规范完整示例
AIWROK环境JavaScript编码规范完整示例
群发软件安卓脚本示例实时截图判断页面变化
安卓脚本示例实时截图判断页面变化
群发软件苹果脚本7种不同的OCR识别
苹果脚本7种不同的OCR识别
群发软件安卓脚本多变的function用法
安卓脚本多变的function用法
群发软件苹果脚本示例Config配置H5集成
苹果脚本示例Config配置H5集成
群发软件安卓脚本类型判断与Boolean对象综合示例
安卓脚本类型判断与Boolean对象综合示例
群发软件线程全局变量H5可视化控制台
线程全局变量H5可视化控制台
群发软件秒吐司快速显示和关闭的UI提示窗口
秒吐司快速显示和关闭的UI提示窗口
群发软件苹果脚本里H5 里的 window.at.callFun 示例
苹果脚本里H5 里的 window.at.callFun 示例
群发软件H5日志打印运行过程例子
H5日志打印运行过程例子
群发软件AIWROK软件字符串方法实用案例
AIWROK软件字符串方法实用案例
群发软件HID贝塞尔曲线运动控制器
HID贝塞尔曲线运动控制器
群发软件AIWROK苹果脚本sleep方法综合实战示例
AIWROK苹果脚本sleep方法综合实战示例
群发软件苹果脚本Line控件的多种创意用法和实际应用场景
苹果脚本Line控件的多种创意用法和实际应用场景
群发软件苹果脚本toast高级应用综合示例
苹果脚本toast高级应用综合示例
群发软件苹果智能OCR自动化助手
苹果智能OCR自动化助手
群发软件苹果脚本UI超快速点击示例
苹果脚本UI超快速点击示例
群发软件展示时间戳的各种复杂处理方法
展示时间戳的各种复杂处理方法
群发软件苹果脚本随机数实用示例
苹果脚本随机数实用示例
群发软件安卓手机脚本多种倒计时显示方式
安卓手机脚本多种倒计时显示方式
群发软件苹果脚本屏幕事件EVENT示例
苹果脚本屏幕事件EVENT示例
群发软件苹果脚本屏幕类screen例子
苹果脚本屏幕类screen例子
群发软件安卓手机config配置演示实列
安卓手机config配置演示实列
群发软件苹果脚本配置config小实例
苹果脚本配置config小实例 https://www.yuque.com/aiwork/dcvhmb/qolobpysdg0hvi2e
群发软件苹果脚本矩形类rect小实例
苹果脚本矩形类rect小实例
群发软件AIWROK安卓苹果平台设计的实用工具库
AIWROK安卓苹果平台设计的实用工具库
群发软件AIWROK软件Function导入方法实例演示
AIWROK软件Function导入方法实例演示
群发软件苹果脚本实例1项目project应用示例
苹果脚本实例1项目project应用示例
群发软件苹果脚本实例1剪贴板功能集成
苹果脚本实例1剪贴板功能集成
群发软件苹果iOS脚本Detect类系统性使用示例
苹果iOS脚本Detect类系统性使用示例
群发软件AIWROK苹果系统打印H5界面日志输出
AIWROK苹果系统打印H5界面日志输出
群发软件H5案例自动化看广告撸金币系统
H5案例自动化看广告撸金币系统
群发软件AIWROK苹果脚本H5任务执行小例子
AIWROK苹果脚本H5任务执行小例子
群发软件AIWROK软件苹果水平容器[Horizontal]小实例
AIWROK软件苹果水平容器[Horizontal]小实例
群发软件AIWROK苹果脚本实例1界面UI输入框类[Input]
AIWROK苹果脚本实例1界面UI输入框类
群发软件AIWROK软件苹果脚本案例1空白站位[Space]方法
AIWROK软件苹果脚本案例1空白站位[Space]方法
群发软件AIWROK软件苹查系统复选框用法
AIWROK软件苹查系统复选框用法
群发软件苹果AIWROK实例单选按钮组类[RadioButtonGroup]完整综合示例
苹果AIWROK实例单选按钮组类[RadioButtonGroup]完整综合示例
群发软件AIWROK软件苹果实例UI-垂直容器[Vertical]高级综合示例
AIWROK软件苹果实例UI-垂直容器[Vertical]高级综合示例
群发软件IOS苹果脚本View的完整功能实例
IOS苹果脚本View的完整功能实例
群发软件AIWROK苹果系统实例演示1标签类[Label]方法
AIWROK苹果系统实例演示1标签类[Label]方法
信息发布软件AIWROK软件苹果UI按钮Button方法示例
AIWROK软件苹果UI按钮Button方法示例
信息发布软件AIWROK软件苹果TAB界面视图示例
AIWROK软件苹果TAB界面视图示例
信息发布软件AIWROK苹果系统自带view视图简洁UI界面示例
AIWROK苹果系统自带view视图简洁UI界面示例
信息发布软件汇集HID安卓输入文字的方法和复制粘贴示例
汇集HID安卓输入文字的方法和复制粘贴示例
信息发布软件AIWROK软件找字与OCR方法汇总示例
AIWROK软件找字与OCR方法汇总示例
信息发布软件AIWROK软件找图方法汇总示例
AIWROK软件找图方法汇总示例
信息发布软件AIWROK软件滑动方法集合示例
AIWROK软件滑动方法集合示例
信息发布软件AIWROK软件安卓AIWROK汇集软件点击
AIWROK软件安卓AIWROK汇集软件点击
信息发布软件苹果系统点击方法综合示例
苹果系统点击方法综合示例
信息发布软件AIWROK苹果系统找图方法完整示例集合
AIWROK苹果系统找图方法完整示例集合
信息发布软件苹果系统找图方法完整示例集合
苹果系统找图方法完整示例集合
信息发布软件苹果IOS系统找字OCR方法例子
苹果IOS系统找字OCR方法例子
信息发布软件AIWORK软件数组高级示例
AIWORK软件数组高级示例
信息发布软件AIWROK软件运算符封装库示例
AIWROK软件运算符封装库示例
信息发布软件AIWROK软件语法运行小示例
AIWROK软件语法运行小示例
信息发布软件AIWROK软件JS循环小示例
AIWROK软件JS循环小示例
信息发布软件AIWROK软件H5网页被主脚本获取值用法
AIWROK软件H5网页被主脚本获取值用法

QQ|( 京ICP备09078825号 )

本网站信息发布软件,是可以发布论坛,发送信息到各大博客,各大b2b软件自动发布,好不夸张的说:只要手工能发在电脑打开IE能发的网站,用这个宣传软件就可以仿制动作,进行推送发到您想发送的B2B网站或是信息发布平台上,不管是后台,还是前台,都可以进行最方便的广告发布,这个广告发布软件,可以按月购买,还可以试用软件,对网站的验证码也可以完全自动对信息发布,让客户自动找上门,使企业轻松实现b2b发布,这个信息发布软件,均是本站原创正版开发,拥有正版的血统,想要新功能,欢迎提意见给我,一好的分类信息群发软件在手,舍我其谁。QQ896757558

GMT+8, 2026-5-13 20:25 , Processed in 0.814671 second(s), 56 queries .

宣传软件--信息发布软件--b2b软件广告发布软件

快速回复 返回顶部 返回列表