[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Mayor precisión



Saludos!!

(antes que nada, creo que no es offtopic, pues es un comportamiento de
un compilador nativo de linux que mucha gente usa y que deberiamos de
prestar atención en especial si hacemos cosas delicadas con valores o
muy pequeños o muy grandes y la influencia tanto del hardware como del
software puede ser mucho muy significativa)...

Pregunta:

¿Cuanto es:
 4.0 * 1.26516329633375221419555600732564926147460937500000e03?

Tabajando en C con dos precisiones tenemos:

5.06065318533500976627692580223083496093750000000000e+03 Double en 32bits
5.06065318533500885678222402930259704589843750000000e+03 Long Double en 32bits
5.06065318533500885678222402930259704589843750000000e+03 Double en 64bits.

Quiere decir, que la precision de los resultados en un procesador de
64 bits es muchisima mayor que en una de 32 bits, me extraña muchisimo
pues yo esperaria que los dos procesadores usaran 64 bits
internamente de forma nativa, independientemente de la plataforma.

Ahi va la prueba
En 32 bits, un sizeof (tamaño en bytes de la variable)
Double=8
Long Double=12

En 64bits
Double=8
Long Double=16

Las pruebas fueron hechas en:
32bits: Pentium 4.
64bits: Pentium D.

¿Interesante, no; alguien tiene alguna idea de como esta trabajando
gcc? Porque me he encontrado con otras sopresas que desconciertan a
primera vista y que me ha costado muchos dias encontrarlas...

Ahora podran responder con certeza que un proc de 64bits en realidad
tiene una mayor precision, independientemente de la representacion en
bits del valor.

#include <stdio.h>
#include <stdlib.h>

int main(){
  long double x = 1.26516329633375221419555600732564926147460937500000e03;
  long double cuatro = 4.0;
  printf("%.50Le\n",cuatro*x);
  printf("Double=%i\n",sizeof(double));
  printf("Long Double=%i\n",sizeof(long double));
}


-- 
ItZtLi


Reply to: