如何解决Float型机器Epsilon计算错误?

问题描述 投票:0回答:1
#include <stdio.h>
void get_eps(float *eps) {
    *eps = 1.0f;

    while ((1.0f + *eps / 2.0f) != 1.0f) {
        *eps /= 2.0f;
    }
}

int main(){
    float eps;

    get_eps(&eps);
    printf("Machine Accuracy (get_eps): \t%.10g\n", eps);

    return 0;
}

我正在尝试计算 float(32bit) 的机器 epsilon。

期望 1.19e-07,这是浮点类型的已知机器 epsilon,我得到 1.08e-19,这是 long double 的机器 epsilon。请帮我解决这个问题。我还有什么遗漏的地方吗?

c floating-point floating-accuracy epsilon
1个回答
0
投票

C 标准允许实现以比标称类型更高的精度计算浮点表达式。

然而,它要求通过作业和成本来“丢弃”这种多余的精度。因此将测试更改为

(float) (1.0f + *eps / 2.0f) != 1.0f
应该可以。

© www.soinside.com 2019 - 2024. All rights reserved.