gpt4 book ai didi

python - 如何在 python 2.5 中将 Python float 转换为十六进制字符串?附加的无效解决方案

转载 作者:行者123 更新时间:2023-11-28 20:00:12 25 4
gpt4 key购买 nike

我真正需要做的是在不损失精度的情况下将 float 导出到 C。

我是用 python 做的:

import math
import struct
x = math.sqrt(2)
print struct.unpack('ii', struct.pack('d', x))
# prints (1719614413, 1073127582)

在 C 中我尝试这样做:

#include <math.h>
#include <stdio.h>

int main(void)
{
unsigned long long x[2] = {1719614413, 1073127582};
long long lx;
double xf;

lx = (x[0] << 32) | x[1];
xf = (double)lx;
printf("%lf\n", xf);
return 0;
}

但是在 C 中我得到:

7385687666638364672.000000 而不是 sqrt(2)。

我错过了什么?

谢谢。

最佳答案

Python 代码似乎有效。问题出在 C 代码中:您正确填写了 long long,但是随后您将整数值直接转换为 float ,而不是重新解释字节作为。如果你向它抛出一些指针/地址,它就会起作用:

jkugelman$ cat float.c
#include <stdio.h>

int main(void)
{
unsigned long x[2] = {1719614413, 1073127582};
double d = *(double *) x;

printf("%f\n", d);
return 0;
}
jkugelman$ gcc -o float float.c
jkugelman$ ./float
1.414214

另请注意,double(以及 float)的格式说明符是 %f,而不是 %lf%lf 用于long double

关于python - 如何在 python 2.5 中将 Python float 转换为十六进制字符串?附加的无效解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1053121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com