对于C语言的计算程序感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍c语言的计算程序有哪些,并为您提供关于c–如果符合IEEE754的两种语言,这两种语言的计算结果会产生相同的答案?、c++计算
对于C语言的计算程序感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍c语言的计算程序有哪些,并为您提供关于c – 如果符合IEEE 754的两种语言,这两种语言的计算结果会产生相同的答案?、c++ 计算程序时间、C语言--计算程序执行时间、c语言/c++计算程序运行时间的有用信息。
本文目录一览:- C语言的计算程序(c语言的计算程序有哪些)
- c – 如果符合IEEE 754的两种语言,这两种语言的计算结果会产生相同的答案?
- c++ 计算程序时间
- C语言--计算程序执行时间
- c语言/c++计算程序运行时间
C语言的计算程序(c语言的计算程序有哪些)
您要在c = a * b
和a
没有适当值的时候分配b
。在将值分配给a
和b
之后,您应该执行此计算,否则结果将是一些垃圾值。
正确的方法:
#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的两种语言,这两种语言的计算结果会产生相同的答案?
问题是,循环的每个步骤都使用上一步骤的计算.此外,计算之间的差异仅在第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++ 计算程序时间
#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语言–计算程序执行时间
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++计算程序运行时间
精确到毫秒(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++计算程序运行时间等更多相关知识的信息可以在本站进行查询。
本文标签: