Cientificosaficionados.com

Los foros de los científicos aficionados de la red.
Fecha actual Sab May 25, 2013 11:53 pm

Todos los horarios son UTC + 1 hora [ DST ]




Nuevo tema Responder al tema  [ 14 mensajes ]  Ir a página 1, 2  Siguiente
Autor Mensaje
NotaPublicado: Mié Ene 18, 2012 1:19 pm 
Desconectado
Avatar de Usuario

Registrado: Lun Feb 20, 2006 2:12 pm
Mensajes: 1911
Ubicación: Madrid
Lo he compilado en microsoft C++ 6.0 y los long double dan la misma precisión que los double (64 bits)

He mirado en internet y dicen que con el gcc usan 80 bits.

¿Podeis compilar y ejecutar esto en gcc a ver si dan igual?:

Citar:
#include <stdio.h>

void main()
{
long i;
double x0, x=1.0, dx=1.0;
long double lx0,lx=1.0L,ldx=1.0L;

for (i=0;i<25;i++)
{
x0=x;
lx0=lx;
x=x0+dx;
lx=lx0+ldx;
printf("\n%li ",i);
if (x==x0)
printf("double== ");
else
printf("double!= ");
if (lx==lx0)
printf("long_double== ");
else
printf("long_double!= ");
dx/= 10.0;
ldx/=10.0L;
}
getchar();getchar();
}


Arriba
 Perfil  
 
NotaPublicado: Mié Ene 18, 2012 2:56 pm 
Desconectado
Avatar de Usuario

Registrado: Mié Sep 06, 2006 8:28 am
Mensajes: 666
Ubicación: Alcala de Henares (Madrid, España)
Esto es lo que me ha salido con el gcc de MinGW:
Código:
0 double!= long_double!=
1 double!= long_double!=
2 double!= long_double!=
3 double!= long_double!=
4 double!= long_double!=
5 double!= long_double!=
6 double!= long_double!=
7 double!= long_double!=
8 double!= long_double!=
9 double!= long_double!=
10 double!= long_double!=
11 double!= long_double!=
12 double!= long_double!=
13 double!= long_double!=
14 double!= long_double!=
15 double!= long_double!=
16 double== long_double!=
17 double== long_double!=
18 double== long_double!=
19 double== long_double==
20 double== long_double==
21 double== long_double==
22 double== long_double==
23 double== long_double==
24 double== long_double==

_________________
¡No es imposible, lo que pasa es que no sabes como hacerlo!


Arriba
 Perfil  
 
NotaPublicado: Mié Ene 18, 2012 4:02 pm 
Desconectado
Avatar de Usuario

Registrado: Mié Sep 06, 2006 8:28 am
Mensajes: 666
Ubicación: Alcala de Henares (Madrid, España)
Eso con el gcc 4.5.2 para windows (MinGw).
Con el Borland C++ Builder 6, bcc32 version 5.6, sale lo mismo.

_________________
¡No es imposible, lo que pasa es que no sabes como hacerlo!


Arriba
 Perfil  
 
NotaPublicado: Mié Ene 18, 2012 4:57 pm 
Desconectado
Avatar de Usuario

Registrado: Lun Dic 04, 2006 3:13 pm
Mensajes: 3126
Ubicación: Barrio Buceo
País: Uruguay
Ciudad: Montevideo
Pregunta tonta: ¿Tendrá que ver con que se compile para las bibliotecas de 32 bit y no para las de 64 bit, que solo funcionan en los nuevos procesadores de 64 bit?

Salud

_________________
El permanente cambio es la constante del mundo.


Arriba
 Perfil  
 
NotaPublicado: Mié Ene 18, 2012 5:22 pm 
Desconectado
Avatar de Usuario

Registrado: Lun Feb 20, 2006 2:12 pm
Mensajes: 1911
Ubicación: Madrid
Entonces según gcc y borlan C++ tengo 26 bits más que hacen como dos y medio dígitos más.
Puede parecer una tontería pero cuando tengo que resolver ecuaciones de más de 6 variables y hay que invertir matrices grandes con muchas multiplicaciones y sumas me influye mucho.

Gracias.

Citar:
Pregunta tonta: ¿Tendrá que ver con que se compile para las bibliotecas de 32 bit y no para las de 64 bit, que solo funcionan en los nuevos procesadores de 64 bit?


No tiene nada que ver, según he visto en foros. Incluso hay lenguajes de programación que les dá más espacio a la hora de almacenar los datos e incluso hace las operaciones con 80 bits para luego meterlos en 64. ¿Para qué entonces los micros de 64 bits sino además de complicarnos la vida?


Arriba
 Perfil  
 
NotaPublicado: Jue Ene 19, 2012 8:11 am 
Desconectado
Avatar de Usuario

Registrado: Mié Sep 06, 2006 8:28 am
Mensajes: 666
Ubicación: Alcala de Henares (Madrid, España)
No tiene que ver nada la longitud de palabra del micro con las operaciones que puede hacer.
Un simple 8080 puede hacer operaciones de punto flotante de 80 bits sin problemas y sin unidad de punto flotante, por programa encadenando muchas operaciones simples.
Un micro con palabras grande hace operaciones con números largos en una sola microinstrucción, lo que le da muchcísima velocidad, pero puede encadenar varias microinstrucciones y hacer operaciones de mas bits. Las mismas operaciones generarán menos código y serán mas rápidas compiladas para 64 bits que para 32. Esto es ya responsabilidad del compilador. Las librerías de los embebidas en los compiladores suelen trabajar con algún estandar (como el IEE754) pero uno puede trabajar con otras librerías distintas y usar la precisión que quiera.
Yo usé, hace años, unas librerías del JPL para "matemáticas de precisión arbitraria" que, dependiendo de la memoria que tubieras, podías hacer operaciones con tantos bits como quisieras. Se utilizan para cálculos con números enormes, como calcular millones de dígitos de PI.
Por último, los micros de 64 bits se crearon para extender las capacidades de los de 32 sobre todo (comenzó AMD) porque con 32 bits solo podían direccionar 2^32 bytes = 4Gb (aunque gracias al registro de página había 4 bits mas y se podían direccionar 64Gb paginados, físicamente tenían un bus de direcciones de 36 bits). Con los micros de 64 bits se puede direccionar TODA la memoria de forma lineal. Ya puestos extendieron todos os registros internos a 64 bits de forma que pudieran retener direcciones de memoria de más de 32 bits. La incompatibilidad de entre SO de 32-64 bits viene por ese detalle: en un SO de 32 bits las interrupciones y llamadas a rutinas han de estar alojadas en direcciones que quepan en 32 bits mientras que en uno de 64 bits usan el doble de tamaño y pueden estar en cualquier zona de memoria.

_________________
¡No es imposible, lo que pasa es que no sabes como hacerlo!


Arriba
 Perfil  
 
NotaPublicado: Jue Ene 19, 2012 1:31 pm 
Desconectado
Avatar de Usuario

Registrado: Jue Dic 01, 2011 4:00 am
Mensajes: 370
País: España
Ciudad: Jumilla
De cualquier manera esto es lo que dice C++

microfostia dice que son 64bit
borland dice que son 80bit
gnu dice que son 96it

¿qué compilador usas?

Te recomiendo que si vas a usar números extremadamente grandes y con extremada precisión utilices strings y te estrujes un poco.


Un saludo.

_________________
ax+by+cz+dj+et


Arriba
 Perfil  
 
NotaPublicado: Jue Ene 19, 2012 10:15 pm 
Desconectado
Avatar de Usuario

Registrado: Mar Nov 18, 2008 11:00 pm
Mensajes: 657
Ubicación: Zamora
no me he fijado mucho pero creo que estas usando caracteres especiales para declarar variables cambiales el nombre sin signos ni numeros


Arriba
 Perfil  
 
NotaPublicado: Jue Ene 19, 2012 10:24 pm 
Desconectado
Avatar de Usuario

Registrado: Mar Nov 18, 2008 11:00 pm
Mensajes: 657
Ubicación: Zamora
tambien tienes entrecomillado un nombre de una variable para imprimir lo que hace que en vez de un numero lo tome como una cadena, si no lo muestra directamente lo tienes que convertir con un .tostring o similar no entrecomillado

de todas formas cambia lo que te he puesto en el post anterior


Arriba
 Perfil  
 
NotaPublicado: Vie Ene 20, 2012 10:13 am 
Desconectado
Avatar de Usuario

Registrado: Lun Feb 20, 2006 2:12 pm
Mensajes: 1911
Ubicación: Madrid
Pues leyendo un poco más sobre gcc, dicen que tienen floats de 128 bits, aunque lo hace por software. ¿Podéis probar heli o cualquier otro este programa? - no sé si borland también lo tiene -:
Mientras me miro las qlib.


Citar:
#include <stdio.h>

void main()
{
long i;
double x0, x=1.0, dx=1.0;
__float128 lx0,lx=1.0L,ldx=1.0L;

for (i=0;i<30;i++)
{
x0=x;
lx0=lx;
x=x0+dx;
lx=lx0+ldx;
printf("\n%li ",i);
if (x==x0)
printf("double== ");
else
printf("double!= ");
if (lx==lx0)
printf("long_double== ");
else
printf("long_double!= ");
dx/= 10.0;
ldx/=10.0L;
}
getchar();getchar();
}



Citar:
tambien tienes entrecomillado un nombre de una variable para imprimir lo


Es que no he explicado lo que hace el programa:
El programa vá sumando un decimal a 1. Cada vez este decimal tiene más ceros a la izquierda, hasta que detecta que ambos números son iguales y de esta manera sabemos cual es la precisión. Es un poco rebuscado pero funciona.


Arriba
 Perfil  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 14 mensajes ]  Ir a página 1, 2  Siguiente

Todos los horarios son UTC + 1 hora [ DST ]


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro

Buscar:
Desarrollado por phpBB® Forum Software © phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com