C99中的double_t

yCa*_*ran 6 double c99

我刚刚读到C99有double_t,至少应该是double的两倍.这是否意味着它在小数位后给出更精确的数字?超过通常的15位数倍?

其次,如何使用它:仅包括

#include <float.h> 
Run Code Online (Sandbox Code Playgroud)

足够?我读到必须将FLT_EVAL_METHOD设置为2以获得long double.这该怎么做?当我使用数值方法时,我希望在不使用任意精度库的情况下获得最大精度.

非常感谢...

Ste*_*non 5

double_t至少一样宽为双; 也就是说,它可能与double相同.C99标准中的脚注190使意图明确:

float_t和double_t类型的目的是实现最有效的类型,至少与float和double一样宽.

正如Michael Burr所说,你无法设定FLT_EVAL_METHOD.

如果您想在仅使用C99的任何系统上使用最宽的浮点类型,请使用long double.请注意,在某些平台上它将与double(甚至可能是相同的float)相同.

此外,如果你"使用数值方法",你应该意识到,对于许多(甚至是)数值方法,该方法的近似误差远大于双精度的舍入误差,因此使用更宽的通常没有任何好处类型.当然存在例外情况.你正在研究什么类型的数值方法?

编辑:严肃地说,或者(a)只是使用long double和称呼它一天或(b)花几周的时间来了解浮点数是如何在您定位的平台上实际实现的,以及实际的准确度要求是什么您正在实施的算法.