我想编写一个将浮点数重写为连续分数的函数

时间:2018-10-21 14:20:41

标签: error-handling f#

我正在尝试创建一个递归函数,该函数可以将浮点数重写为连续分数。我收到了我不理解的错误信息

似乎无法存储某些二进制数字,那么我该如何比较。那就是我目前的理论。

  

不满足条件'cfa_reg!= -1'

#include <stdio.h>
#include <string.h>
#include <stdint.h>

int main(void) {
    float a;
    uint32_t a_v = 0b00111111110000000000000000000000;

    memcpy(&a, &a_v, sizeof(float));
    printf("%f\n", a);
    // prints 1.500000 on linux x86-64
}

1 个答案:

答案 0 :(得分:3)

当我运行您的代码时。我出现堆栈溢出。

这意味着您的条件x - floor x = 0.0从未满足。

具有浮点数的相等是一件棘手的事情,因为在所有计算中始终都涉及一个小的精度误差。永远不要使用相等,而是计算直到差异小于可接受的误差为止

abs(x - floor x) < 0.0000000001