-1

我正在使用 Mac OSX,用 C 编程并在终端中使用 bash。

我目前正在尝试为 gamma 函数制作一个查找表。我被告知调用 gsl_sf_gamma 非常昂贵,而且查找表会快得多。我不希望失去太多的准确性,所以我想要一个相当大的查找表。初始化一个巨大的数组并不理想,因为它会破坏目的。

我的想法是在哪里制作一个大文本文件,其中包含为感兴趣范围内的伽马函数预先评估的值。一个主要问题是我不知道如何使用 C 调用文本文件中的特定行。

感谢你们提供的任何见解和帮助。

警告:我对字符串和 txt 文件知之甚少,所以我可能只是不知道一个简单的函数已经可以做到这一点。

4

2 回答 2

1

Gamma 基本上是阶乘,除了连续形式。您想要对 gamma 函数执行查找而不是计算。您想使用文本文件来表示这些结果。文件的每一行代表输入值乘以 1000。我猜对于足够高的输入值,文件扫描可能会胜过计算。

但是,我认为您至少会希望在文件中计算索引。该文件仍然可以排列为文本文件,但您还有另一个步骤来扫描文件,并记录每个结果行的字节偏移量。这些偏移量被记录到一个二进制文件中,该文件将用作您的索引。

运行程序时,首先将索引文件加载到一个数组中,该数组的索引是 gamma 输入的下限乘以 1000,该索引处的数组值是记录在索引文件。当您想计算特定数字的 gamma 时,将输入乘以 1000,然后截断结果以获得数组索引。您可以查阅此数组的偏移量,以及计算输入长度的下一个数组值。然后,您的 gamma 文本文件将作为二进制文件打开。您寻找偏移量,并读取长度字节数以获取您的数字。您还需要阅读下一个条目来执行插值。

于 2013-05-31T21:29:13.660 回答
1

是的,计算 gamma 很慢(我认为 GSL 使用 Lancosz 公式,它对一个系列求和)。如果您需要计算的值的数量有限(例如,您只计算整数),那么查找表肯定会有所帮助。但是如果表太大而无法存储,它就无济于事——它甚至比计算还要慢。

如果该表可以放入内存,则将其存储在文件中直到您需要它然后将整个内容立即加载到内存中没有任何问题。

于 2013-05-31T22:27:08.553 回答