gpt4 book ai didi

将 C 中的 float 转换为 IEEE 标准

转载 作者:行者123 更新时间:2023-12-02 05:12:18 25 4
gpt4 key购买 nike

我正在尝试用 C 语言编写一个代码,生成一个随机整数,执行简单的计算,然后我试图以 IEEE 标准打印文件的值。但是我做不到,请帮忙。

我无法以非常重要的十六进制/二进制打印它。如果我在 fprintf 中键入转换值,我将收到此错误 expected expression before double

int main (int argc, char *argv) {

int limit = 20 ; double a[limit], b[limit]; //Inputs
double result[limit] ; int i , k ; //Outputs
printf("limit = %d", limit ); double q;


for (i= 0 ; i< limit;i++)
{
a[i]= rand();
b[i]= rand();
printf ("A= %x B = %x\n",a[i],b[i]);

}

char op;

printf("Enter the operand used : add,subtract,multiply,divide\n");
scanf ("%c", &op); switch (op) {

case '+': {
for (k= 0 ; k< limit ; k++)
{

result [k]= a[k] + b[k];
printf ("result= %f\n",result[k]);

}
}
break;

case '*': {
for (k= 0 ; k< limit ; k++)
{

result [k]= a[k] * b[k];

}
}
break;

case '/': {
for (k= 0 ; k< limit ; k++)
{

result [k]= a[k] / b[k];

}
}
break;

case '-': {
for (k= 0 ; k< limit ; k++)
{

result [k]= a[k] - b[k];

}
}
break; }


FILE *file; file = fopen("tb.txt","w"); for(k=0;k<limit;k++) {
fprintf (file,"%x\n
%x\n%x\n\n",double(a[k]),double(b[k]),double(result[k]) );

}


fclose(file); /*done!*/
}

最佳答案

如果您的 C 编译器直接支持 IEEE-754 浮点格式(因为 CPU 支持它)或完全模拟它,您可以简单地将 doubles 打印为字节。 x86/64 平台就是这种情况。

这是一个例子:

#include <limits.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <float.h>

void PrintDoubleAsCBytes(double d, FILE* f)
{
unsigned char a[sizeof(d)];
unsigned i;
memcpy(a, &d, sizeof(d));
for (i = 0; i < sizeof(a); i++)
fprintf(f, "%0*X ", (CHAR_BIT + 3) / 4, a[i]);
}

int main(void)
{
PrintDoubleAsCBytes(0.0, stdout); puts("");
PrintDoubleAsCBytes(0.5, stdout); puts("");
PrintDoubleAsCBytes(1.0, stdout); puts("");
PrintDoubleAsCBytes(2.0, stdout); puts("");
PrintDoubleAsCBytes(-2.0, stdout); puts("");
PrintDoubleAsCBytes(DBL_MIN, stdout); puts("");
PrintDoubleAsCBytes(DBL_MAX, stdout); puts("");
PrintDoubleAsCBytes(INFINITY, stdout); puts("");
#ifdef NAN
PrintDoubleAsCBytes(NAN, stdout); puts("");
#endif
return 0;
}

输出(ideone):

00 00 00 00 00 00 00 00 
00 00 00 00 00 00 E0 3F
00 00 00 00 00 00 F0 3F
00 00 00 00 00 00 00 40
00 00 00 00 00 00 00 C0
00 00 00 00 00 00 10 00
FF FF FF FF FF FF EF 7F
00 00 00 00 00 00 F0 7F
00 00 00 00 00 00 F8 7F

如果不直接支持 IEEE-754,问题就会变得更加复杂。不过还是可以解决的。

以下是一些可以提供帮助的相关问题和答案:

当然,所有与 IEEE-754 相关的信息都可以在 Wikipedia 中找到.

关于将 C 中的 float 转换为 IEEE 标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15238892/

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