我是 C 新手,我正在尝试查找机器 epsilon (1.0 + maceps > 1.0)、eta (eta > 0.0) 和 MAX (MAX < infinity),但我的代码无法按预期工作。首先,macheps 是使用 80 位精度计算的。我如何强制它为单,双和长双?其次,代码根本没有完成计算双精度的结果。
编辑:修复了格式错误。
/* macheps eta max */
#include <stdio.h>
#include <math.h>
#include <float.h>
#define TYPE long double
int main(void)
{
TYPE macheps = (TYPE) 1.0;
TYPE eta = (TYPE) 1.0;
TYPE maksymilian = (TYPE) 2.0;
TYPE real_macheps;
TYPE real_eta;
TYPE real_maksymilian;
TYPE something = (TYPE) 1.0 + (TYPE) macheps;
while ((TYPE) something > (TYPE) 1.0)
{
real_macheps = (TYPE) macheps;
printf("%e ", (TYPE) real_macheps);
macheps = (TYPE) macheps/(TYPE) 2.0;
something = (TYPE) 1.0 + (TYPE) macheps;
}
printf("%e\n", (TYPE) real_macheps);
while ((TYPE) eta > (TYPE) 0.0)
{
real_eta = (TYPE) eta;
eta = (TYPE) eta/(TYPE) 2.0;
}
printf("%e\n", (TYPE) real_eta);
while ((TYPE) maksymilian != INFINITY)
{
(real_maksymilian) = (TYPE) maksymilian;
maksymilian = (TYPE) maksymilian*(TYPE) 2.0;
}
real_maksymilian = (TYPE) real_maksymilian * (TYPE) (2.0-(TYPE) real_macheps);
printf("%e\n", (TYPE) real_maksymilian);
}
EDIT2:上面的代码不应该强制精度吗?我错过了什么?
EDIT3: 仍然没有为 long double 提供正确的 macheps。