Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Menu

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menu

Mensajes - swapd0

#1
General Programadores / Re: comparar floats o doubles
15 de Mayo de 2012, 09:54:11 PM
Jope con las comparaciones con floats y doubles, es bastante mas complicado de lo que parece.

Cita de: TrOnTxU en 15 de Mayo de 2012, 08:51:56 AM
EDIT: despues del "tostón" de post he encontrado la repsuesta corta ^^:
// Check if the numbers are really close -- needed
// when comparing numbers near zero.
float absDiff = fabs(a - b);
if (absDiff <= maxRelDiff)
return true;


Parece que con esto va mucho mejor. La version anterior que tenia hacia la comparacion restando los dos numeros y comparandolos con un epsilon pero en casos donde las coordenadas eran mas grandes el epsilon no funcionaba bien por falta de precision.

De paso le añadiré el código que has puesto de prueba al mío para asegurarme de que todo va bien.

Muchas gracias.
#2
General Programadores / Re: comparar floats o doubles
15 de Mayo de 2012, 09:25:01 AM
Ok, probare esta tarde a ver como va.

El EPSILON_DIFF en las primeras pruebas ponía 5, ahora vale 50.

El problema de la técnica de usar enteros es que (por lo que he visto por ahi) no hay forma de calcular bien este EPSILON_DIFF. Si lo vas a usar en una aplicación donde los números van a estar en un rango conocido pues lo pones fijo y a correr. Si el rango es desconocido y vas a calcular números pequeños con otros mas grandes pues ni idea.
#3
General Programadores / comparar floats o doubles
15 de Mayo de 2012, 12:09:35 AM
Hola

Estoy haciendo una libreria de geometria, se supone que no debes poner cosas como a == b cuando a y b son floats o doubles. Asi que despues de buscar por google he hecho pruebas con la versión de comparar usando enteros (http://www.lomont.org/Math/Papers/2005/CompareFloat.pdf).

Pero tengo el siguiente problema. Con estos valores tan proximos la diferencia (diff) da un valor muy grande, mientras que en otros casos (normalmente cuando un valor no es 0.0) parece que va bien.

a = 1.2831915740410711e-14
b = 0.0

diff vale 4399142829531438451

¿Mando a la mierda esta forma de comparar y uso otra? ¿Algun otro truco para hacer que las comparaciones sean robustas? He pensado en "trasladar" al 0.0 antes de hacer la comparacion para ver si asi hay menos problemas de precision. El codigo seria b-=a; a=0.0;


static bool near_equal(double a, double b, boost::int64_t maxDiff = EPSILON_DIFF)
{
boost::int64_t ai = *reinterpret_cast<boost::int64_t *>(&a);
boost::int64_t bi = *reinterpret_cast<boost::int64_t *>(&b);
boost::int64_t sign = (((boost::uint64_t)(ai ^ bi)) >> 63) - 1;

BOOST_ASSERT( (sign == 0) || (sign == 0xffffffffffffffff) );

boost::int64_t diff = (((0x8000000000000000 - ai) & (~sign)) | (ai & sign)) - bi;
boost::int64_t v1 = maxDiff - diff;
boost::int64_t v2 = maxDiff + diff;

return (v1 | v2) >= 0;
}

#4
General / Re: Gestor de Proyectos
18 de Mayo de 2011, 11:19:11 PM
A la porra, he instalado el mantis y parece que va bien
#5
General / Re: Gestor de Proyectos
18 de Mayo de 2011, 09:29:59 PM
Para no abrir otro hilo.

¿Alguien ha conseguido instalar jira en un OS X? He seguido al pie de la letra un video de la pagina y no me funciona, cuando pongo en el navegador localhost:8080 no me aparece la pagina para configurarlo y el script anterior no me da ningun error.

¿Alguien ha tenido que hacer algo mas?

Tengo un OS X 10.5.8
#6
Cita de: Zaelsius en 12 de Marzo de 2011, 01:29:36 AM
Se haría así:

y->A::foo();

Por cierto la vinculación dinámica no tiene nada que ver con la pregunta.

El problema es que eso no me vale, ya que el metodo foo lo se llamaria desde una clase generica y esta no sabe si el objeto en cuestion esta heredado o no.

Imaginate que el metodo foo se encarga de guardar los datos a disco o mostrarte en pantalla las propiedades de un objeto. Yo creo un objeto de la clase B, pero al mismo tiempo quiero ver la representación como si fuera un objeto de la clase A y B.

Creo que es un fallo de mi "diseño" y lo pongo entre comillas porque ya sabéis como se trabaja, lo que un día esta bien mañana no vale una mierda y lo tienes que rehacer.

#7
Si tengo un objeto en una jerarquia de clases, ¿hay alguna forma de hacer que ese objeto funcione como si fuera de la clase padre?

En el codigo de abajo, siempre imprime "B" porque el objeto y apunta a un objeto de tipo B, hay alguna forma de hacer que imprima "A" pero sin crear un objeto nuevo (sin hacer algo como A *z=new A(x) y despues z->foo())

#include <iostream>

class A
{
public:

virtual void foo()
{
std::cout << "A" << std::endl;
}
};

class B : public A
{
public:

virtual void foo()
{
std::cout << "B" << std::endl;
}
};

int main (int argc, char * const argv[])
{
A *x=new B();
A *y;

x->foo();
y=(A *)x; y->foo();
y=dynamic_cast<A *> (x); y->foo();
y=static_cast<A *> (x); y->foo();
y=reinterpret_cast<A *> (x); y->foo();

    return 0;
}
#9
General Programadores / Re: Xcode3, Interface Builder y OpenGL
22 de Febrero de 2011, 09:34:21 PM
El initWithFrame se ejecuta porque pongo un breakpoint y se para, si pongo el awakeFromNib da un error de ejecucion.

#10
General Programadores / Xcode3, Interface Builder y OpenGL
22 de Febrero de 2011, 12:24:24 AM
Hola, llevo un par de dias que me esto tirando de los pelos  :grrr:

Quiero abrir una simple ventana para dibujar en opengl y lo quiero hacer usando el interface builder (IB), tengo eso mismo pero copiando uno de los ejemplos y quitando lo que no necesito, pero lo quiero hacer yo desde cero para enterarme.

Yo sigo los siguentes pasos, por cierto uso el xcode 3.1.

- Creo un proyecto cocoa
- Si lo ejecuto sale una ventana vacia, todo ok
- Le añado un NSOpenGLView a la ventada desde el IB, lo raro es que sale en negro y en los ejemplos esta sale en azul y con un nombre en el centro. Ademas con el inspector puedo poner los parametros de inicializacion (Formato de pixel, zbuffer...) pero en los ejemplos no puedo acceder a ellos  :grrr:.
- Compilo y ejecuto y sale la ventana con un cuadrado en blanco (la ventana de opengl)
- Creo un objeto en IB llamado openGLView y le pongo el siguiente codigo, ademas selecciono el NSOpenGLView y le digo que es de la clase openGLView, pero sale igual, ademas no parece que de error

-(id)initWithFrame: (NSRect)frame
{
GLuint attribs[] =
{
NSOpenGLPFANoRecovery,
NSOpenGLPFAWindow,
NSOpenGLPFAAccelerated,
NSOpenGLPFADoubleBuffer,
NSOpenGLPFAColorSize, 24,
NSOpenGLPFAAlphaSize, 8,
NSOpenGLPFADepthSize, 24,
NSOpenGLPFAStencilSize, 8,
NSOpenGLPFAAccumSize, 0,
0
} ;

NSOpenGLPixelFormat* fmt = [[NSOpenGLPixelFormat alloc] initWithAttributes: (NSOpenGLPixelFormatAttribute*) attribs];

if (!fmt)
NSLog(@"No OpenGL pixel format");

self = [super initWithFrame:frame pixelFormat: [fmt autorelease]];
return self;
}

-(void) drawRect:(NSRect)rect
{
[[self openGLContext] makeCurrentContext];

glViewport(0, 0, (GLsizei) rect.size.width, (GLsizei) rect.size.height);

glClearColor(0, 0, 0, 0);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glColor3f(1.0, 1.0, 1.0);
glBegin(GL_TRIANGLES);
glVertex2f(-0.5, -0.5);
glVertex2f( 0.5,  0.5);
glVertex2f( 0.5, -0.5);
glEnd();

[[self openGLContext] flushBuffer ];
}


¿Alguna idea?
#11
General Programadores / Re: XCode-3 y librerias estaticas
19 de Noviembre de 2010, 12:47:32 AM
Ya lo he arreglado, como dices Zaelsius el problema va por ahí, pero no es solo el tipo de arquitectura (x86, PowerPC), también hay que mirar el tipo de objeto (universal u otra que no me acuerdo) y el tipo de leguaje usado (ANSI C, C99 GNU99...), la versión del SO destino (10.4 o 10.5)...

Resumiendo, que como es tan genérico el entorno y puedes programar en C, C++, Objetive-C, Objetive-C++... y otras cosas, como se te pase lo mas mínimo te encuentras con un montón de problemas.
#12
General Programadores / XCode-3 y librerias estaticas
17 de Noviembre de 2010, 11:38:03 PM
Hola, sigo trasteando con XCode-3 y hay cosas que me sacan me matan...

Tengo una pequeña aplicacion que carga una libreria estatica hecha en c++, las dos estan hechas por mi, todo compila bien pero al linkar me dice que no encuentra las referencias a las clases de la libreria.

Lo que me mosquea es que antes pone esto:

ld warning: in /code/libs/cad/build/Debug/libcadBSD.a, file is not of required architecture

Mi pregunta es, ¿como leches puedo añadir una libreria estatica a un proyecto?, en la pestaña "General" del proyecto tengo añadido a libcadBSD.a en el panel de "linked Libraries" pero parece que no le hace caso.

Gracias.
#13
General Programadores / Re: problemas con namespaces en c++
11 de Noviembre de 2010, 12:06:37 AM
Ups, solucionado.

Tenia en un fichero un CAD_BEGIN_NAMESPACE sin un CAD_END_NAMESPACE al final y por eso me fastidiaba todo... jope una hora perdida buscando el error.  :-[
#14
General Programadores / problemas con namespaces en c++
10 de Noviembre de 2010, 11:50:24 PM
Hola

Estoy haciendo unas librerias y para "evitar problemas" (por ahora me están dando mas  :grrr:) he decidido crearlas dentro de un namespace.

Esto seria en un fichero de configuracion que es incluido por todos los ficheros de la libreria.

#if CAD_USE_NAMESPACE
#define CAD_NAMESPACE cad
#define CAD_BEGIN_NAMESPACE namespace CAD_NAMESPACE {
#define CAD_END_NAMESPACE }
#define CAD_USING_NAMESPACE using namespace CAD_NAMESPACE
#else
#define CAD_NAMESPACE
#define CAD_BEGIN_NAMESPACE
#define CAD_END_NAMESPACE
#define CAD_USING_NAMESPACE
#endif



El modo de empleo se supone que seria asi.

CAD_BEGIN_NAMESPACE

class foo
{
...
};

CAD_END_NAMESPACE

// y esto en el cpp
CAD_USING_NAMESPACE
foo::foo()
...
foo::cargar()
{
    BOOST_FOREACH(...)
    {
        ...
    }
}


El problema es que me encuentro con un monton de errores (1998 por ahora), creo que la mayoria es porque al usar el using namespace xxx intenta buscar todo ahi, yo creia que si no lo encuentra en el namespace actual lo busca los que hayas añadido usando using:

   - El BOOST_FOREACH lo intenta buscar en cad::boost::foreach  >:(
   - si uso una clase de otra libreria hecha igual tengo que poener cosas como FOO_NAMESPACE::foo xxx::devuelveFoo().

¿Alguna forma de arreglar esto, o alguna forma mejor de hacerlo (no usar los namespaces no vale ;))?


#15
General Programadores / Re: Listas de errores/todo
20 de Abril de 2010, 09:56:44 PM
La verdad es que con esto creo que tengo de sobra.

// TODO:
// TOFIX:
// !!!:
// ???:






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.