c - 如何以编程方式写下这个数学表达式?

标签 c math lisp

The sum of f(i) for all integers i = k, k + 1, .., continuing only as long as the condition p(i) holds.

我要去:

 for (i = 0; i <= V_COUNT; i++) {
  sum += sine_coeff[i] * pow(E, e_factor[i]) * sin(
    (solar_coeff[i] * solar_anomaly)
    + (lunar_coeff[i] * lunar_anomaly)
    + (moon_coeff[i] * moon_argument)
    );
 }

基于以下 Common LISP 代码:

         (sigma ((v sine-coeff)
                 (w E-factor)
                 (x solar-coeff)
                 (y lunar-coeff)
                 (z moon-coeff))
                (* v (expt cap-E w)
                   (sin-degrees
                    (+ (* x solar-anomaly)
                       (* y lunar-anomaly)
                       (* z moon-argument)))))))

西格玛在哪里:

(defmacro sigma (list body)
  ;; TYPE (list-of-pairs (list-of-reals->real))
  ;; TYPE -> real
  ;; $list$ is of the form ((i1 l1)..(in ln)).
  ;; Sum of $body$ for indices i1..in
  ;; running simultaneously thru lists l1..ln.
  `(apply '+ (mapcar (function (lambda
                                 ,(mapcar 'car list)
                                 ,body))
                     ,@(mapcar 'cadr list))))

(有关完整的源代码,请参阅 Calendrical calculations source code

编辑 感谢您的所有回答。通过研究代码示例,我得出的结论是,在编程术语中,作者确实提到必须循环访问一组特定的值。由此,很容易得出结论,当 p 的值用完时,它必须返回 False,即控制已到达列表的末尾。

最佳答案

定义一个函数p(),例如:

bool_t p(int i)
{
   // some conditional code here, that returns TRUE or FALSE
}

看起来你需要循环任意长的时间(即没有硬性上限),并且你需要在 p(i) 返回 FALSE 时停止循环>。因此,您可能需要这样的循环:

int sum = 0;
for (int i = k; p(i); i++)
{
    sum += f(i);
}

根据 isum 的大小,您可能希望将它们声明为 long 而不是 int.

关于c - 如何以编程方式写下这个数学表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4640556/

相关文章:

c - 像 GTK_TEXT_VIEW 这样的宏有什么作用?

c - 64 位 native 类型原子性和内存总线?

lisp - Lisp 中的负无穷大

Lisp 程序产生契约(Contract)违规

LISP 找不到要打开的文件

c - 将字符串拆分为C中的单词数组

java - 最长递增子序列 - 无法理解实际的 LIS 创建

php - 加在一起 ​​MySQL values 论坛专栏

python - 获取范围内集合的端点

ios - 带有分数的 NSDecimalNumber 在提升到高幂时返回大数?