C89(ANSI C)标准中有一种称为long double
的数据类型,但没有任何数学函数可以支持long double
(<math.h>
)。例如,sin
函数接受long
参数。
C99支持long double
的数学函数。
我的问题是,当ANSI C中没有任何数学函数支持long double
时,long double
是否有用?
答案 0 :(得分:0)
是的,如果你想计算一个精度超过两倍的表达式,“long double”绝对有用。
一个有趣的问题是“究竟是什么 IS ''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。