C89 (ANSI C) 标准中有一种数据类型称为long double
,但没有任何数学函数支持long double
( <math.h>
)。例如,sin
函数接受一个long
参数。
C99 支持long double
.
long double
我的问题是,当ANSI C 中没有任何数学函数支持时,long double
有用吗?
C89 (ANSI C) 标准中有一种数据类型称为long double
,但没有任何数学函数支持long double
( <math.h>
)。例如,sin
函数接受一个long
参数。
C99 支持long double
.
long double
我的问题是,当ANSI C 中没有任何数学函数支持时,long double
有用吗?
是的,如果您希望计算一个超过双精度的表达式,“long double”绝对有用。
一个有趣的附带问题是“'long double '到底是什么”?
答案取决于平台和/或编译器:
仅仅因为 math.h 不支持某些东西并不意味着您不能自己制作。
存在的类型是一件好事,因为它意味着有一种跨平台的方式来请求具有或多或等于 long 精度的东西。如果它不在某处的语言中,则无法做到这一点(最好的选择是使用结构或长/双精度数组来破解某些东西)。
这些功能只是为了方便;有时可以使用内置的 sin 处理器函数,但有时不能,取而代之的是 sin 函数仅包含一种算法,可以使用标准操作生成答案或查找答案。
如果需要,您可以将目标平台的 sinl 函数从 C99 复制到 C89。这里有一个很大的实现列表:http: //sourceware.org/git/ ?p=glibc.git;a=tree;f=sysdeps/ieee754;hb=HEAD
或者只是坚持C99。