我正在使用python从Blender编写浮点值,然后在C中读取。
对于某些值,我得到0。
如果我用2.3或其他随机数字替换这些值它是有效的。
我正在使用struct.pack("<ffff")
来编写它们。
以下是不起作用的示例值:
-8.881784197001252e-16, -1.700029006457271e-15, 6.106226635438361e-16, 1.0
当我在十六进制编辑器中打开文件时,我找到了正确的编号-8.88178E-16
如何阅读正确的值?
这是python示例:
#!/usr/bin/python
import struct
f = open("test.f", "wb")
f.write(struct.pack("<f", -8.881784197001252e-16))
f.write(struct.pack("<f", 123.0324))
然后是C:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
FILE *file = fopen("test.f", "rb");
float test = 0;
fread(&test, sizeof(float), 1, file);
printf("a ='%f'\n", test);
fread(&test, sizeof(float), 1, file);
printf("b ='%f'\n", test);
return 0;
}
我得到的C输出是:
a ='-0.000000'
b ='123.032402'
答案 0 :(得分:0)
OP需要使用指数表示法格式打印在C中读取的数字,以清楚地看到有效数字。
// printf("a ='%f'\n", test);
printf("a ='%e'\n", test);
// or to print with enough distinguishing significance for all float
#include <float.h>
printf("a ='%.*e'\n", FLT_DECIMAL_DIG - 1, test);