cerf,cerfc,ctgamma和clgamma功能的状态?

时间:2013-04-01 06:45:00

标签: c complex-numbers cmath

如果我们查看C11草案,保留以下名称:

7.31 Future library directions
The following names are grouped under individual headers for convenience. All external
names described below are reserved no matter what headers are included by the program.
7.31.1 Complex arithmetic <complex.h>
The function names
cerf cerfc cexp2 cexpm1 clog10 clog1p clog2 clgamma ctgamma
and the same names suffixed with f or l may be added to the declarations in the
<complex.h> header.

我非常希望看到复杂的伽玛函数作为标准C的一部分(因为它们是许多其他复杂函数的基础),我想知道7.31.1子句的真正意义是什么。

为什么只添加声明而不是其定义?

我们可以期待它们用于下一个C标准还是次要版本? (如果答案是肯定的,那么预计下一个标准是什么时候?)

是否有任何实现已经可用作编译器的非标准扩展?

2 个答案:

答案 0 :(得分:3)

几个月前,我发布了一个库libcerf,根据Steven G. Johnson的数字代码提供缺失的cerf和cerfc函数。我们的实现精确到13-14位数,这对于几乎所有实际应用来说都足够好 - 但是要实现这一目标,人们应该知道在编写可接受的标准时还需要做多少工作:这不太可能会被执行任何人都很快。

关于你关于clgamma和ctgamma的问题:不要等待标准。搜索恰到好处的代码。理想情况下,包装此代码并提供类似于libcerf的库,它几乎与标准实现一样好。

答案 1 :(得分:0)

glibc维护者几乎从不想添加任何未标准化的新功能,并且cerf不是C99标准的一部分 - 它仅仅是为了将来可能使用而保留,这使glibc特别不可能将接受一个实现,直到函数的所需行为已经标准化。

如果它被合并,肯定会很好,就像C ++代码中的“erf()”,而是“cerf()”。

根据手册:

cerf [f | l] C99一个可选的复杂错误函数,如果提供的话,必须是 在complex.h中声明。

根据上述声明,如果提供的话,函数将被声明为