【发布时间】:2014-06-11 02:48:47
【问题描述】:
我一直在努力用 C 语言实现一些非常简单的东西,以使我的计算物理项目中的一个程序(不是我编写的)更具动态性: 在 if 条件下逐个元素地比较两个不同的数组。
#include <math.h>
#include <stdio.h>
#include "header.h"
const int nParam = 10;
double a[nParam], a_tmp[nParam];
double values[10000];
double FitParam(double x){
int xindex;
double value;
xindex=(int) x;
if (a_tmp[1]==a[1] && a_tmp[2]==a[2] && a_tmp[3]==a[3] && a_tmp[4]==a[4]){
value=values[xindex];
return(value);
}
// code continues... (very long subroutine and there is recursion for
// the subroutine so this if statement above is very important).
每次我们运行程序时,数组a[ ] 都有不同数量的重要元素;例如,现在,我们只对元素 [1] 到 [4] 使用这个子例程。但是,在其他情况下,我们会希望元素更少或更多,例如最多 3 个元素或最多 5 个元素。
所以本质上,我希望能够重写上面的 if 语句,使其是动态的......换句话说,如果考虑了 N 个元素,那么它会这样做::: p>
if (a_tmp[1]==a[1] && ... && a_tmp[N]==a[N]){}
因此,只要我们感兴趣的元素的数量 N 发生变化,这个 if 条件就会发生变化(N 在此文件的标题中定义为 #define,我刚刚将其命名为 header.h)。
非常感谢您对这项任务的支持。谢谢。
【问题讨论】:
-
比较
doubles 是否相等通常是个坏主意。 -
我推断您出于“性能原因”故意避开循环是吗?如果是这样,您应该真正运行分析器以确保您手动扩展的解决方案实际上更快。即使是这样,它也有助于量化您所追求的收益。
-
memcmp(&a_tmp[1], &a[1], 4 * sizeof a[1]);