Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/math/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/npm/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 长双精度在ANSI C中有用吗?_Math_C99_C89_Long Double - Fatal编程技术网

Math 长双精度在ANSI C中有用吗?

Math 长双精度在ANSI C中有用吗?,math,c99,c89,long-double,Math,C99,C89,Long Double,C89 ANSI C标准中有一种称为长双精度的数据类型,但没有任何数学函数支持长双精度。例如,sin函数接受一个长参数 C99支持长双精度的数学函数 我的问题是,当ANSI C中没有任何数学函数支持长双精度时,长双精度有用吗?是的,如果您希望计算精度超过两倍的表达式,长双精度绝对有用 一个有趣的附带问题是,“长双精度”到底是什么 答案取决于平台和/或编译器: 是的,如果您希望计算精度超过两倍的表达式,则长双精度绝对有用 一个有趣的附带问题是,“长双精度”到底是什么 答案取决于平台和/或编译器:

C89 ANSI C标准中有一种称为长双精度的数据类型,但没有任何数学函数支持长双精度。例如,sin函数接受一个长参数

C99支持长双精度的数学函数


我的问题是,当ANSI C中没有任何数学函数支持长双精度时,长双精度有用吗?

是的,如果您希望计算精度超过两倍的表达式,长双精度绝对有用

一个有趣的附带问题是,“长双精度”到底是什么

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


是的,如果您希望计算精度超过两倍的表达式,则长双精度绝对有用

一个有趣的附带问题是,“长双精度”到底是什么

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


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

现有的类型是一件好事,因为它意味着有一种跨平台的方式来请求更高或同等精度的内容。如果不是在语言中的某个地方,这是不可能做到的,你最好的办法是用一个结构或长/双数组来破解某些东西

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

如果需要,可以将目标平台的sinl函数从C99复制到C89。这里有一个很大的实现列表:


或者只是坚持使用C99。

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

现有的类型是一件好事,因为它意味着有一种跨平台的方式来请求更高或同等精度的内容。如果不是在语言中的某个地方,这是不可能做到的,你最好的办法是用一个结构或长/双数组来破解某些东西

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

如果需要,可以将目标平台的sinl函数从C99复制到C89。这里有一个很大的实现列表:


或者只使用C99。

关于+、-、*和/?对于使用长双精度以获得最佳结果的这些类型的应用程序,+、-、*、/是不够的。对于x86_64 float,它们已被SSE取代。然而,至少在GCC中,即使float和double使用SSE,long double仍然使用x87。因此,如果想在某些代码中使用x87,双精度是一种方法。对于MSVC,long double似乎只是double的同义词,所以当double使用SSE时,它不会让您使用x87。也许你的问题是:x87除了兼容还是80位浮点仍然有用?这是一个有趣的问题。对于使用长双精度获得最佳结果的这些类型的应用程序,+、-、*和/?如何?、-、*、/不够。对于x86_64 float,它们已被SSE取代。然而,至少在GCC中,即使float和double使用SSE,long double仍然使用x87。因此,如果想在某些代码中使用x87,双精度是一种方法。对于MSVC,long double似乎只是double的同义词,所以当double使用SSE时,它不会让您使用x87。也许你的问题是:x87除了兼容还是80位浮点仍然有用?这是一个有趣的问题。