[C con Clase] Valores flotantes en memoria
cesar arias
sinatra435 en hotmail.com
Jue Mayo 16 04:01:06 CEST 2013
Hola hola, como estan, tengo un pequeño problema de comprencion, es el siguiente:
Hice un programa para ver como se almacena un valor punto flotante en memoria, es el siguiente:
#include"stdio.h"
struct st1 {
bool a1 : 1;
bool a2 : 1;
bool a3 : 1;
bool a4 : 1;
bool a5 : 1;
bool a6 : 1;
bool a7 : 1;
bool a8 : 1;
bool b1 : 1;
bool b2 : 1;
bool b3 : 1;
bool b4 : 1;
bool b5 : 1;
bool b6 : 1;
bool b7 : 1;
bool b8 : 1;
bool c1 : 1;
bool c2 : 1;
bool c3 : 1;
bool c4 : 1;
bool c5 : 1;
bool c6 : 1;
bool c7 : 1;
bool c8 : 1;
bool d1 : 1;
bool d2 : 1;
bool d3 : 1;
bool d4 : 1;
bool d5 : 1;
bool d6 : 1;
bool d7 : 1;
bool d8 : 1;
};
union punto {
struct st1 car;
float x;
};
int main(){
union punto var;
var.x=0.5;
for(short y=1; y<12; y++){
printf("%.1f = ", var.x);
printf("%d", (short)var.car.a1);
printf("%d", (short)var.car.a2);
printf("%d", (short)var.car.a3);
printf("%d", (short)var.car.a4);
printf("%d", (short)var.car.a5);
printf("%d", (short)var.car.a6);
printf("%d", (short)var.car.a7);
printf("%d ", (short)var.car.a8);
printf("%d", (short)var.car.b1);
printf("%d", (short)var.car.b2);
printf("%d", (short)var.car.b3);
printf("%d", (short)var.car.b4);
printf("%d", (short)var.car.b5);
printf("%d", (short)var.car.b6);
printf("%d", (short)var.car.b7);
printf("%d ", (short)var.car.b8);
printf("%d", (short)var.car.c1);
printf("%d", (short)var.car.c2);
printf("%d", (short)var.car.c3);
printf("%d", (short)var.car.c4);
printf("%d", (short)var.car.c5);
printf("%d", (short)var.car.c6);
printf("%d", (short)var.car.c7);
printf("%d ", (short)var.car.c8);
printf("%d", (short)var.car.d1);
printf("%d", (short)var.car.d2);
printf("%d", (short)var.car.d3);
printf("%d", (short)var.car.d4);
printf("%d", (short)var.car.d5);
printf("%d", (short)var.car.d6);
printf("%d", (short)var.car.d7);
printf("%d\n", (short)var.car.d8);
var.x=(short)y;
}
printf("\nsizeof(union punto): %d\n", sizeof(union punto));
return 0;
}
Supongo que el programa esta bien, pero no puedo interpretar los valores, quiero decir: la salida es la siguiente:
0.5 = 00000000 00000000 00000000 11111100
1.0 = 00000000 00000000 00000001 11111100
2.0 = 00000000 00000000 00000000 00000010
3.0 = 00000000 00000000 00000010 00000010
4.0 = 00000000 00000000 00000001 00000010
5.0 = 00000000 00000000 00000101 00000010
6.0 = 00000000 00000000 00000011 00000010
7.0 = 00000000 00000000 00000111 00000010
8.0 = 00000000 00000000 00000000 10000010
9.0 = 00000000 00000000 00001000 10000010
10.0 = 00000000 00000000 00000100 10000010
sizeof(union punto): 4
*****************************************************
Segun un libro que leo se supone que la salida de 0.5 debe ser:
0.5 = 00000000 00000000 00000101 11111111
ya que los primeros tres octeto escrito representa el valor 5 y el ultimo octeto reprecenta el valor -1, entonces el valor se lo interpreta de la siguiente manera:
5 * 10^(-1) = 0.5
donde 10 es un valor necesario en la interpretacion de los valores flotante.
Como podemos ver, la secuencia de bits en la salida no es la esperada.
Entiendo que hay varias formas de interpretar valores para una computadora, o puede ser tambien que el programa esté resuelto de una forma incorrecta, pero me inclino por lo primero.
Espero me puedan ayudar con este dilema, creo que es basico conoser como se almacenan e interpretan los numeros en la memoria.
Gracias por sus respuestas.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20130515/1360247e/attachment.html>
Más información sobre la lista de distribución Cconclase