我正在尝试创建一个递归函数,该函数可以将浮点数重写为连续分数。我收到了我不理解的错误信息
似乎无法存储某些二进制数字,那么我该如何比较。那就是我目前的理论。
不满足条件'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
}
答案 0 :(得分:3)
当我运行您的代码时。我出现堆栈溢出。
这意味着您的条件x - floor x = 0.0
从未满足。
具有浮点数的相等是一件棘手的事情,因为在所有计算中始终都涉及一个小的精度误差。永远不要使用相等,而是计算直到差异小于可接受的误差为止
abs(x - floor x) < 0.0000000001