нашел в интернете вот такую программу на си, но я не понимаю union, struct не могу понять, сколько памяти сейчас отводится для записи числа, т.к нужно 8 байт. printf("%d sizeof \n", sizeof(var.f)); 4 байта float f;может здесь нужен double
#include <stdio.h>//ограничение по библиотекам math, stdlib, conio
void printBinary(int n, int i)
{
// Prints the binary representation
// of a number n up to i-bits.
int k;
for (k = i - 1; k >= 0; k--) {
if ((n >> k) & 1)
printf("1");
else
printf("0");
}
}
typedef union {
float f;
struct
{
// Order is important.
// Here the members of the union data structure
// use the same memory (32 bits).
// The ordering is taken
// from the LSB to the MSB.
unsigned int mantissa : 23;
unsigned int exponent : 8;
unsigned int sign : 1;
} raw;
} myfloat;
// Function to convert real value
// to IEEE foating point representation
void printIEEE(myfloat var)
{
// Prints the IEEE 754 representation
// of a float value (32 bits)
printf("%d | ", var.raw.sign);
printBinary(var.raw.exponent, 8);
printf(" | ");
printBinary(var.raw.mantissa, 23);
printf("\n");
}
// Driver Code
int main()
{
// Instantiate the union
myfloat var;
// Get the real value
var.f = -641.34441;
printf("%d sizeof var.f \n", sizeof(var.f));//4 байта
// Get the IEEE floating point representation
printf("IEEE 754 representation of %f is : \n",
var.f);
printIEEE(var);
return 0;
}
unsigned long longтебе понадобится. – Qwertiy Mar 13 '21 at 08:04IEEE 754я думаю вы правы и вам нужно использоватьdouble. Но не простоfloatзаменить наdouble, нужно так же изменить кол-во бит под мантиссу и экспоненту. Про это вы можете почитать тут. – Павел Ериков stand with Russia Mar 13 '21 at 08:07unsigned intнаunsigned long longт.к.unsigned int- 32 бита, что больше 52 – Павел Ериков stand with Russia Mar 13 '21 at 08:29