Discussion:
igualdad con double
(demasiado antiguo para responder)
Guillermo
2005-12-18 01:06:49 UTC
Permalink
Hola
Tengo un problema. Resulta que necesito saber si una variable del
tipo double es mayor que otra. Por ejemplo

double a,b;

a = funtion1();
b = funtion2();

if(a=b)
operar()
.......


etc.

El problema es que como son del tipo double es posible que sean iguales
y que solo difieran en el decimal 19. No quiero truncar a,b pasandolas
a enteros. Tambien el problema es cuando uso mayor que o menor que,
porque puede ser que difieran en el decimal 10 y entonces diga que es
mayor cuando en realidad son iguales. Hay alguna manera de hacer que
funcione las comparaciones con doubles?. Yo estoy programando en linux
usando gcc y se que la glibc trae una funcion que compara puntos
flotantes. Pero me estoy rigiendo por el estandar ANSI y si uso esa
funcion o otra que dependa del sistema de operacion mi programa deja de
ser portable lo que es una prioridad para mi.

Alguna sugerencia?

Gracias
Guillermo
AnimAlf
2005-12-18 08:22:58 UTC
Permalink
En Sat, 17 Dec 2005 17:06:49 -0800, Guillermo va escriure:

la igualdad es
==
con = lo que haces es asignación y siempre se cumplirá
--
AnimAlf ***@engendro.sytes.net
http://www.fut.es/~acl/AnimAlf
Personal Experimental WebServer: http://www.engendro.sytes.net
LiNUX ReGiSteRED UseR #91326
PublicPGPkeyID 0xB3B41215
Is the truth out there?

Coalición europea contra el correo comercial no solicitado:
http://www.euro.cauce.org/es/
Oscar Garcia
2005-12-18 10:54:38 UTC
Permalink
Post by Guillermo
Hola
Tengo un problema. Resulta que necesito saber si una variable del
tipo double es mayor que otra. Por ejemplo
double a,b;
a = funtion1();
b = funtion2();
if(a=b)
operar()
.......
Completo la aportación de AnimAlf.

La igualdad en una comparación se hace siempre con doble signo de
igualdad (==) para diferenciarlo de la asignación (=).

Ese condicional que tú haces se cumplirá como "verdadero" siempre que
b sea distinto de cero.

Lo que hace es lo siguiente...

1.- Introducir el valor de "b" en "a".
2.- Comprobar el valor asignado a "a". Si es cero lo considera un
resultado falso y si es distinto de cero lo considera como verdadero.

Un saludo.
--
Óscar Javier García Baudet
LinaresDigital
http://redstar.linaresdigital.com/
Carlos
2005-12-18 21:59:45 UTC
Permalink
Post by Guillermo
Hola
Tengo un problema. Resulta que necesito saber si una variable del
tipo double es mayor que otra. Por ejemplo
double a,b;
a = funtion1();
b = funtion2();
[...]
Post by Guillermo
El problema es que como son del tipo double es posible que sean iguales
y que solo difieran en el decimal 19. No quiero truncar a,b pasandolas
a enteros. Tambien el problema es cuando uso mayor que o menor que,
porque puede ser que difieran en el decimal 10 y entonces diga que es
mayor cuando en realidad son iguales. Hay alguna manera de hacer que
funcione las comparaciones con doubles?. Yo estoy programando en linux
usando gcc y se que la glibc trae una funcion que compara puntos
flotantes. Pero me estoy rigiendo por el estandar ANSI y si uso esa
funcion o otra que dependa del sistema de operacion mi programa deja de
ser portable lo que es una prioridad para mi.
Alguna sugerencia?
La solución "estándar" es restarlas y compararlas con un número
suficientemente pequeño (o grande, depende de qué lado se lo mire). Por
ejemplo:

if (a - b > 0.0001) /* a mayor que b */;
else if (b - a > 0.0001) /* b mayor que a */;
else if (fabs(a - b) <= 0.0001) /* iguales */;
else puts("¿eh?");

o algo así. Suerte.

Loading...