Red de conocimiento informático - Conocimiento sistemático - Programación de suma en punto flotante

Programación de suma en punto flotante

En primer lugar, la suma bit a bit no es tan fácil como cree, porque la estructura de los datos de almacenamiento flotante es diferente de la estructura de los datos de almacenamiento int y los resultados obtenidos son incorrectos en la mayoría de los casos. Lo siguiente es lo que escribí en dos horas esta tarde. La prueba pasó. Sin embargo, esto no es aplicable a todos. Solo se puede usar en computadoras de 32 bits. Si está interesado, pruébelo y adjunte el código que se ejecutó exitosamente:

#Contains "stdio.h"

float add float ndint(float fa, int nb)

{

int bis nativo = 0; //¿Es un número negativo?

int na = *(int *) amp; //flotar como operación int

int nHighMask = 0xFF lt lt23; //máscara de exponente de potencia

int nMask = ((1 lt; lt23) - 1); // máscara base

int nMe = (1 lt; lt23) (na & nMask); >

int n power =((na amp; nHighMask)> gt23) - 127; //Exponente de potencia

if(fa lt; 0)

{< / p>

nMe =-nMe;

}

// Convierta nb al número binario correspondiente para la operación, es decir, alineación del punto decimal.

int nfnb = nb lt lt(potencia 23-n);

if (nb lt0)

{

nfnb =- nfnb;

}

nMe = nMe nfnb;

if (nMe lt0)

{

bis nativo = 1;

nMe =-nMe;

}

char nMaxPosNoZero = 30 //Recalcular el índice

for(; nMaxPosNoZero >

}

n potencia = nMaxPosNoZero-(potencia 24-n);

if(nMaxPosNoZero lt;23)

{

na = nMe lt lt(23-nMaxPosNoZero);

}

Otro

{

na = nMe gt gt( nMaxPosNoZero-23);

}

na =(n potencia 127) lt;

na =(bisNative) lt30;

return *(float *) amp;

}

int my_main()

{

float fa = addfloatandint(5.04f, 5);

printf(".3f\n ", fa);

Devuelve 0

}