ANSI C中的长双有用吗?

时间:2012-03-24 21:48:33

标签: math c99 c89 long-double

C89(ANSI C)标准中有一种称为long double的数据类型,但没有任何数学函数可以支持long double<math.h>)。例如,sin函数接受long参数。

C99支持long double的数学函数。

我的问题是,当ANSI C中没有任何数学函数支持long double时,long double是否有用?

2 个答案:

答案 0 :(得分:0)

是的,如果你想计算一个精度超过两倍的表达式,“long double”绝对有用。

一个有趣的问题是“究竟是什么 IS ''long double'”?

答案取决于平台和/或编译器:

http://en.wikipedia.org/wiki/Long_double

答案 1 :(得分:0)

仅仅因为math.h不支持某些东西并不意味着你不能自己创造。

现有类型是一件好事,因为它意味着有一种跨平台的方式来请求具有更多或相同精度的东西。如果它不是某种语言的话,就无法做到这一点(你最好的选择就是用一个结构或长/双数组来破解某些东西)。

这些功能只是为了方便;有时可以使用内置的sin处理器函数,但有时不会,而sin函数只是包含一个算法来产生答案,或使用标准操作查找它。

如果需要,您可以将目标平台的sinl函数从C99复制到C89。这里有一大堆实现:http://sourceware.org/git/?p=glibc.git;a=tree;f=sysdeps/ieee754;hb=HEAD

或者只是坚持使用C99。