:底座和奇怪的问题算法执行另外、乘法、不加区分除法性能?

底座和奇怪的问题:算法执行加法、乘法、不加区分除法性能? 计算机分析人士认为原则:加法、乘法和除法,以减少计算性能,然而,到什么程度降低?

写C使用程序30乘以一百万计算的数据来测试时间差,码,如以下:

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

#define N 1000000

void add(float x[], long n) {
	float sum = 0;
	for(long i = 0; i < n; i++)
		sum += x[i];
}

void prod(float x[], long n) {
	float sum = 1;
	for(long i = 0; i < n; i++)
		sum *= (x[i]);
}

void div(float x[], long n) {
 	for(long i = 0; i < n; i++) {
		x[i] /= 3.0;
	}
}

int main()
{
	float x[N];
	clock_t t1 = clock();
	for(int i = 0; i < 50; i++)
	add(x, N);
	clock_t t2 = clock();
	printf("百万数据加法用时:%f 秒\n", (double)(t2 - t1)/ CLOCKS_PER_SEC);

	t1 = clock();
	for(int i = 0; i < 50; i++)
	prod(x, N);
	t2 = clock();
	printf("百万数据乘法用时:%f 秒\n", (double)(t2 - t1)/ CLOCKS_PER_SEC);

	t1 = clock();
	for(int i = 0; i < 50; i++)
	div(x, N);
	t2 = clock();
	printf("百万数据除法用时:%f 秒\n", (double)(t2 - t1)/ CLOCKS_PER_SEC);
	return 0;
}

结果例如以下:

百万数据加法用时:0.157051 秒

百万数据乘法用时:0.184712 秒

百万数据除法用时:0.161014 秒

-----------------------------------------

当加入数百万的数据与:0.156099 第二

乘法万个数据点与时间:0.184023 第二

当数以百万计的数据除以:0.159588 第二

这说明了什么问题?

应该说算法不再区分基本操作?

时间: 2024-10-08 15:32:20

:底座和奇怪的问题算法执行另外、乘法、不加区分除法性能?的相关文章

一个基础而奇怪的问题:算法执行加法、乘法、除法性能无区别?

一个基础而奇怪的问题:算法执行加法.乘法.除法性能无区别? 计算机原理分析觉得:加法.乘法和除法的计算性能依次减少,但减少到什么程度? 编写C程序用30次百万数据计算来測试时间差异性,代码例如以下: #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 1000000 void add(float x[], long n) { float sum = 0; for(long i = 0; i

一个基础而奇怪的问题:算法运行加法、乘法、除法性能无差别?

一个基础而奇怪的问题:算法运行加法.乘法.除法性能无差别? 计算机原理分析认为:加法.乘法和除法的计算性能依次降低,但降低到什么程度? 编写C程序用30次百万数据计算来测试时间差异性,代码如下: #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 1000000 void add(float x[], long n) { float sum = 0; for(long i = 0; i &

利用pl/sql执行计划评估SQL语句的性能简析

一段SQL代码写好以后,可以通过查看SQL的执行计划,初步预测该SQL在运行时的性能好坏,尤其是在发现某个SQL语句的效率较差时,我们可以通过查看执行计划,分析出该SQL代码的问题所在. 那么,作为开发人员,怎么样比较简单的利用执行计划评估SQL语句的性能呢?总结如下步骤供大家参考: 1. 打开熟悉的查看工具:PL/SQL Developer. 在PL/SQL Developer中写好一段SQL代码后,按F5,PL/SQL Developer会自动打开执行计划窗口,显示该SQL的执行计划. 2.

大整数算法[10] Comba乘法(实现)

★ 引子 上一篇文章讲了 Comba 乘法的原理,这次来讲讲如何实现.为了方便移植和充分发挥不同平台下的性能,暂时用了三种不同的实现方式: 1.单双精度变量都有的情况. 2.只有单精度变量的情况. 3.可以使用内联汇编的情况. 前面已经介绍了 Comba 乘法的原理和实现思路,为了方便,再把它贴到这里: 计算 c = a * b,c0,c1,c2 为单精度变量. 1. 增加 c 到所需要的精度,并且令 c = 0,c->used = a->used + b->used. 2. 令 c2

蓝桥杯- 算法训练 矩阵乘法

算法训练 矩阵乘法 时间限制:1.0s   内存限制:512.0MB 问题描述 输入两个矩阵,分别是m*s,s*n大小.输出两个矩阵相乘的结果. 输入格式 第一行,空格隔开的三个正整数m,s,n(均不超过200). 接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j). 接下来s行,每行n个空格隔开的整数,表示矩阵B(i,j). 输出格式 m行,每行n个空格隔开的整数,输出相乘後的矩阵C(i,j)的值. 样例输入 2 3 21 0 -11 1 -30 31 23 1 样例输出 -3 2-8

插入排序算法执行步数浅析

插入排序算法的基本思路:对于给定的数组a[0...n](数组元素为n,下标从0开始,最大值为n-1),逐个地将后续元素插入到已经排好序的数组中. 插入排序的简单实现如下: 1 /* 2 * 插入排序算法 3 * a:带排序的数组:n:数组中元素的个数 4 */ 5 void insertSort ( int * a, int n ) { 6 int temp = 0; 7 int i = 0; 8 int j = 0; 9 for ( i = 1; i < n; i++ ) { 10 temp

268.和算法执行时间相关的因素

1.决定因素 1.1算法选用的策略 1.2问题的规模 1.3编写程序的语言 1.4编译程序产生的机器代码的质量 1.5计算机执行指令的速度 2.其他影响元素 3.问题的规模(时间复杂度) 3.1定义 一个特定算法的“运行工作量”的大小,?只依赖于问题的规模(通常用整数量n表示),?或者说,它是问题规模的函数.?? 假如,随着问题规模 n 的增长,算法执行时间的增长率和 f(n) 的增长率相同,?则可记作:T (n) = O(f(n)), 称T (n) 为算法的(渐近)时间复杂度.??? 一个算法

大整数算法[11] Karatsuba乘法

★ 引子         前面两篇介绍了 Comba 乘法,最后提到当输入的规模很大时,所需的计算时间会急剧增长,因为 Comba 乘法的时间复杂度仍然是 O(n^2).想要打破乘法中 O(n^2) 的限制,需要从一个完全不同的角度来看待乘法.在下面的乘法算法中,需要使用 x 和 y 这两个大整数的多项式基表达式 f(x) 和 g(x) 来表示. 令 f(x) = a * x + b,g(x) = c * x + d,h(x) = f(x) * g(x).这里的 x 相当于一个基,比如十进制下,

大整数算法[08] Comba乘法(原理)

★ 引子          原本打算一篇文章讲完,后来发现篇幅会很大,所以拆成两部分,先讲原理,再讲实现.实现的话相对复杂,要用到内联汇编,要考虑不同平台等等. 在大整数计算中,乘法是非常重要的,因为在公钥密码学中模幂运算要频繁使用乘法,所以乘法的性能会直接影响到模幂运算的效率.下面将会介绍两种乘法:基线乘法和 Comba 乘法,尽管他们的原理和计算看起来十分类似,而且算法的时间复杂度都是 O(n^2),但是他们的效率差别是很大的. ★ 基线乘法 (Baseline Multiplication