【发布时间】:2019-06-02 21:12:42
【问题描述】:
(警告:我是初学者,所以我所说或所做的某些内容可能不符合惯例)
我有一个函数式程序,开头的代码如下。
long double p1[] = { 1,0.708894879,0.264150943,0.105121294,0.525,0.437,0.916,0.237516005,1,0.516431925,1,0.799001248,0.436363636,0.45631068,0.4484375,0.366459627,0.369811321 };
long double p2[] = { 1,0.529569892,0.346774194,0.107526882,0.587,0.353,0.885,0.475672215934624,1,0.446280992,1,0.678756477,0.585185185,0.489552239,0.408396947,0.266129032,0.463316583 };
long double p3[] = { 1,0.52,0.163333333,0.07,0.516,0.402,0.816,0.667733676304516,1,0.518375242,1,0.761016949,0.462686567,0.445783133,0.416481069,0.368794326,0.557907845579078 };
long double p4[] = { 1,0.53038674,0.367403315,0.121546961,0.551,0.274,0.736,0.899487836785253,1,0.268817204,1,0.681481481,0.36,0.382352941,0.27173913,0.209302326,0.0978260869565217 };
long double p5[] = { 1,0.624203822,0.382165605,0.248407643,0.549,0.285,0.692,1.0,1,0.621212121,1,0.934131737,0.390243902,0.24,0.275641026,0.090909091,0.143968871595331 };
long double* p[] = { &p1[17], &p2[17], &p3[17], &p4[17], &p5[17], &p6[17] };
不幸的是,一旦我将这些数组中的每一个扩展为大于 17 的大小,“long double”数据类型就不够大,并且我的程序出现了故障。
我了解到下一步是使用 GMP 库。我已经实现了 GMP 库,但我不知道如何使用它来替换“long double”。我特别无法设置数组值。
GMP 文档说:“一个 mpf_t 对象必须在存储第一个值之前进行初始化。”所以,我这样初始化我的对象:
mpf_t p1[17];
mpf_t p2[17];
mpf_t p3[17];
mpf_t p4[17];
mpf_t p5[17];
mpf_t p6[17];
mpf_t p[17];
这段代码没有明显的错误。
但是,我看不到像在原始代码中那样显式设置数组值的方法。我查看了文档,但所有相关功能似乎只需要两个参数。
也许我必须这样做:
mpf_set_d (p1[1], 1);
mpf_set_d (p1[2], 0.708894879);
...
但我假设情况并非如此。虽然它可以工作,但它会非常乏味并且涉及大量复制粘贴,我被告知这是糟糕技术的标志。
有没有更好的方法?
提前致谢
【问题讨论】:
-
mpf_t p1[17];没有初始化任何东西。 -
@Swift-FridayPie 当GMP谈到初始化时,它的意思是gmplib.org/manual/Initializing-Floats.html#Initializing-Floats。
-
在包含
<gmpxx.h>之后使用C++接口mpf_float。 -
您使用的是 C 还是 C++?