GVKun编程网logo

C语言的计算程序(c语言的计算程序有哪些)

7

对于C语言的计算程序感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍c语言的计算程序有哪些,并为您提供关于c–如果符合IEEE754的两种语言,这两种语言的计算结果会产生相同的答案?、c++计算

对于C语言的计算程序感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍c语言的计算程序有哪些,并为您提供关于c – 如果符合IEEE 754的两种语言,这两种语言的计算结果会产生相同的答案?、c++ 计算程序时间、C语言--计算程序执行时间、c语言/c++计算程序运行时间的有用信息。

本文目录一览:

C语言的计算程序(c语言的计算程序有哪些)

C语言的计算程序(c语言的计算程序有哪些)

您要在c = a * ba没有适当值的时候分配b。在将值分配给ab之后,您应该执行此计算,否则结果将是一些垃圾值。

正确的方法:

#include <stdio.h>

int main()
{
int a,b,c;

printf("a는?: ");
scanf("%d",&a);
printf("b는?: ");
scanf("%d",&b);

c = a * b;
printf("%d * %d = %d ",a,c);

return 0;
}

c – 如果符合IEEE 754的两种语言,这两种语言的计算结果会产生相同的答案?

c – 如果符合IEEE 754的两种语言,这两种语言的计算结果会产生相同的答案?

我正在将程序从Scilab代码转换为C.特别是一个循环产生的结果与原始的Scilab代码略有不同(这是一段长的代码,所以我不会把它包含在这个问题中,但是我会尽力总结下面的问题).

问题是,循环的每个步骤都使用上一步骤的计算.此外,计算之间的差异仅在第100,000次迭代(约30万次)之间变得明显.

注意:我正在使用“格式(25)”将C程序的输出与Scilab 5.5.2的输出进行比较.命令.意思我正在比较25个有效数字.我还想指出,我明白如何在一定数量的位之后无法保证精度,但是在评论之前,请阅读以下部分.到目前为止,这两种语言之间的所有计算都是相同的,最多可达25位数.

试图达到这个问题的底线,到目前为止我已经尝试过:

>检查正在使用的数据类型:

我已经设法确认Scilab正在使用IEEE 754双打(根据语言文档).此外,根据维基百科,C不需要使用IEEE 754进行双打,但从我可以看出来,无论我在C中使用了两倍,都完全符合Scilab的结果.

>检查超验功能的使用:

我也从What Every Computer Scientist Should Know About Floating-Point Arithmetic读到,IEEE不需要超验功能来完全舍弃.考虑到这一点,我已经用这两种语言比较了这些函数(sin(),cos(),exp())的结果,结果看起来是相同的(最多25位数).

>使用其他功能和预定义值:

我重复使用sqrt()和pow()的上述步骤.以及Pi的值(我在C中使用M_PI,在Scilab中使用%pi).结果也是一样的.

>最后,我重写了循环(非常仔细),以确保两种语言之间的代码是相同的.

注意:有趣的是,我注意到,对于所有上述计算,两种语言之间的结果比计算的实际结果(浮点运算之外)更匹配.例如:

使用Wolfram Alpha的sin(x)值= 0.123456789 …..

使用Scilab& C = 0.12345yyyyy …..

即使一旦使用Scilab或C计算的值与实际结果(Wolfram)不同.每种语言的结果仍然相互匹配.这使我相信大部分的价值观是以同样的方式计算的(两种语言之间).即使IEEE 754不需要它们.

我原来的想法是上述前三点之一在两种语言之间实现不同.但是从我能说出的一切似乎都产生了相同的结果.

即使这些循环的所有输入都是相同的,结果可能不同吗?可能是因为一个非常小的错误(过去我可以看到25位数字)发生在一段时间内累积?如果是这样,我该如何解决这个问题?

解决方法

不,编号系统的格式不能保证来自不同语言的功能的等效答案.

函数(如sin(x))可以使用相同的语言(以及不同的语言)以不同的方式实现. sin(x)函数是一个很好的例子.许多实现将使用具有插值的查找表或查找表.这具有速度优势.然而,一些实现可以使用泰勒级数来评估该功能.一些实现可以使用多项式来逼近近似.

具有相同的数字格式是解决语言之间的障碍.功能实现是另一个.

记住,您还需要考虑平台.使用80位浮点处理器的程序将会使用与使用64位浮点软件实现的程序不同的结果.

c++ 计算程序时间

c++ 计算程序时间

#include<iostream.h>
#include<time.h>
void main()
{
   clock_t start,finish;
   double totaltime;
   start=clock();

   ……                     //把你的程序代码插入到这里面

   finish=clock();
   totaltime=(double)(finish-start)/CLOCKS_PER_SEC;
   cout<<"\n此程序的运行时间为"<<totaltime<<"秒!"<<endl;
}

 

C语言--计算程序执行时间

C语言--计算程序执行时间

C语言–计算程序执行时间
1. gettimeofday
精度1us

#include<stdio.h>
#include<sys/time.h>

int main()
{
/* 定义两个结构体 */
struct timeval start;
struct timeval end;
unsigned long timer;
/* 程序开始之前计时start */
gettimeofday(&start, NULL);
printf("hello world!\n");
/* 程序块结束后计时end */
gettimeofday(&end, NULL);
/* 统计程序段运行时间(unit is usec)*/
timer = 1000000 * (end.tv_sec - start.tv_sec) + end.tv_usec - start.tv_usec;
printf("timer = %ld us\n", timer);
return 0;
}

输出结果:

$ ./time
hello world!
timer = 47 us

2. clock
精度能达到1us

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
clock_t begin, end;
double cost;
//开始记录
begin = clock();
/*待测试程序段*/
printf("hello world!\n");
//结束记录
end = clock();
cost = (double)(end - begin)/CLOCKS_PER_SEC;
printf("constant CLOCKS_PER_SEC is: %ld, time cost is: %lf secs", CLOCKS_PER_SEC, cost);
}

输出结果www.cdxsxbx.com

$ ./time
hello world!
constant CLOCKS_PER_SEC is: 1000000, time cost is: 0.000042 secs

3. time命令
$ time ls
0.00s user 0.00s system 0% cpu 0.001 total

user时间是指进程花费在用户模式中的CPU时间,这是唯一真正用于执行进程所花费的时间,其他进程和花费阻塞状态中的时间没有计算在内。
sys时间是指花费在内核模式中的CPU时间,代表在内核中执系统调用所花费的时间,这也是真正由进程使用的CPU时间。
total指进程时间之和。精度1ms

c语言/c++计算程序运行时间

c语言/c++计算程序运行时间

精确到毫秒(ms)

#include<stdio.h>
#include<time.h>   //用到clock()函数
int main() {
	int begintime,endtime;
	int i = 0;
	int a[1002];
	begintime=clock();	//计时开始
	

        /*
        代码块
        */

	endtime = clock();	//计时结束
	printf("\n\nRunning Time:%dms\n", endtime-begintime);
	return 0;
}

精确到微秒(us)

#include<stdio.h>
#include <windows.h>
int main() {
	int a[10002];
	int i = 0;
	double run_time;
	_LARGE_INTEGER time_start;	//开始时间
	_LARGE_INTEGER time_over;	//结束时间
	double dqFreq;		//计时器频率
	LARGE_INTEGER f;	//计时器频率
	QueryPerformanceFrequency(&f);
	dqFreq=(double)f.QuadPart;
	QueryPerformanceCounter(&time_start);	//计时开始
	

        /*
        代码句
        */


	QueryPerformanceCounter(&time_over);	//计时结束
	run_time=1000000*(time_over.QuadPart-time_start.QuadPart)/dqFreq;
	//乘以1000000把单位由秒化为微秒,精度为1000 000/(cpu主频)微秒
	printf("\nrun_time:%fus\n",run_time);
	return 0;
}

测试时间与n的关系

采用的方式是简单的y++

时间复杂度为O(n) 执行9次操作

#include<stdio.h>
#include <iostream>
#include <windows.h>
#define ll long long
using namespace std;
int main() {


    ll x=1000;
    for(int i=1;i<10;i++){
        double run_time;
        LARGE_INTEGER time_start;  //开始时间
        LARGE_INTEGER time_over;   //结束时间
        double dqFreq;      //计时器频率
        LARGE_INTEGER f;    //计时器频率
        QueryPerformanceFrequency(&f);
        dqFreq=(double)f.QuadPart;
        QueryPerformanceCounter(&time_start);   //计时开始

        //开始操作
        ll y=0;
        for(ll j=1;j<=x;j++){
            y++;
        }
        x*=10;
        //结束操作

        QueryPerformanceCounter(&time_over);    //计时结束
        run_time=1000000*(time_over.QuadPart-time_start.QuadPart)/dqFreq;
        //乘以1000000把单位由秒化为微秒,精度为1000 000/(cpu主频)微秒
        printf("\nrun_time:%fus\n",run_time);
    }
    return 0;
}

最后输出的是

run_time:1.924813us

run_time:19.248130us

run_time:192.802098us

run_time:1950.156327us

run_time:18903.267242us

run_time:179787.474985us

run_time:1795408.102051us

run_time:18517596.319244us

run_time:186273317.344554us

明显地发现,呈现着线性的关系,n增大10倍后,时间也是增大10倍,所以时间复杂度可以用O(n)线性表示

今天关于C语言的计算程序c语言的计算程序有哪些的介绍到此结束,谢谢您的阅读,有关c – 如果符合IEEE 754的两种语言,这两种语言的计算结果会产生相同的答案?、c++ 计算程序时间、C语言--计算程序执行时间、c语言/c++计算程序运行时间等更多相关知识的信息可以在本站进行查询。

本文标签: