【发布时间】:2021-07-07 09:55:32
【问题描述】:
我想以 IEEE 标准表示(符号、8 位指数、23 位尾数)打印两个浮点数的十六进制值。我的问题是,我的随机生成的数字是超级大(例如:-26815622280406798000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000)。点后,没有任何数字(只有0),并用符号 P>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
float RandVectorGen(void);
int main () {
srand(time(NULL));
float Vectors_A = 0, Vectors_B = 0, Vectors_SUM = 0;
for(int i = 0; i <= 20; ++i) {
Vectors_A = RandVectorGen(); //Genera 20 vettori tra 100 e 0
Vectors_B = RandVectorGen();
printf("Vettore %d_A: %x => %.6f\n", i, Vectors_A, Vectors_A);
printf("Vettore %d_B: %x => %.6f\n", i, Vectors_B, Vectors_B);
Vectors_SUM = Vectors_A + Vectors_B;
printf("Somma tra i due vettori: %x => %.6f\n", Vectors_SUM, Vectors_SUM);
puts(" ");
}
return 0;
}
float RandVectorGen (void) {
unsigned int Vector1, Vector2;
float RandomVector = ((float)Vector1 / (float)Vector2) * fabs(sin(rand() % 10));
Vector1 = (rand() % 30);
Vector2 = (rand() % 30);
return RandomVector;
}
【问题讨论】:
-
您的意思是“将浮点值的原始形式转储为十六进制”还是“转储十六进制等效值”?
-
注意,这里使用的缩进风格真的很乱,很难跟上。
-
是的,我想像这样打印浮点的原始形式:upload.wikimedia.org/wikipedia/commons/thumb/e/e8/…
-
您可以使用
%a或%Aprintf 格式说明符以十六进制打印浮点值。 -
一个用于将类型的二进制表示重新解释为不同类型的常用技巧(称为“类型双关语”)是使用联合。例如
union foo { float f; unsigned int ui; };union foo x;x.f = Vectors_A;`printf("%x", x.ui);.
标签: c floating-point 32-bit ieee-754