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