c - C 中的机器 epsilon 估计

标签 c precision epsilon

我是 C 的新手,我正在尝试查找机器 epsilon (1.0 + macheps > 1.0)、eta (eta > 0.0) 和 MAX (MAX < infinity),但我的代码没有按预期工作。首先,macheps 是使用 80 位精度计算的。我如何强制它成为单倍、双倍和长双倍?其次,代码根本没有计算完 double 的结果。

编辑:修复了格式错误。

/* 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。

最佳答案

您的程序将调用未定义的行为。在 C 中,long 表示 long int 而不是 long double

关于c - C 中的机器 epsilon 估计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19478628/

相关文章:

c - C 中用户输入的指针指针字符串 (char **)

objective-c - ObjC/C 语法 : static void *const Something = (void *)&Something;

python - 如果 n 位损坏或丢失,如何找到 float 的精度

c - FLT_MIN 相乘所花费的时间过长

python - Keras、Tensorflow - 计算指标时 K.epsilon 的含义是什么

c - C 中逗号运算符的问题

C、结构、简单示例抗议语法已更新

c++ - 具有 float 的 C++ 程序的输出是否可预测?

Python pandas 带 to_csv 的大 float

c++ - 四倍精度的 Epsilon (gcc)