用C读取txt文件中的特定行

时间:2013-05-31 20:35:01

标签: c text-files lookup-tables

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

是的,计算伽玛很慢(我认为GSL使用Lancosz公式,它是一系列的总和)。如果您需要计算它的值的数量是有限的(例如,您只是整数),那么查找表肯定会有所帮助。但是如果表格对于记忆来说太大了,那就无济于事了 - 它甚至会慢于计算。

如果表 适合内存,将它存储在文件中直到你需要它然后立即将整个内容加载到内存中没有任何问题。