Chiste: actualidad española

Diversos personajes se acercaron a la sede de la famosa Guía Guiness de records mundiales para «renovar sus títulos»:

Entró Cenicienta y a los cinco minutos salió llena de alegría:
– ¡¡Sigo siendo la más bella del Mundo!!
Luego entró Pulgarcito y a los pocos minutos salía saltando y de lo más contento:
– ¡¡Todavía no hay nadie más pequeño que yo!!
Entró DUMBO y enseguida salió feliz, batiendo sus orejas:
– ¡¡AUN SOY EL UNICO ELEFANTE VOLADOR!!
Entró ALÍ BABÁ escoltado por sus 40 ladrones…
– A los 10 minutos salió rojo de la rabia, insultando y gritando en alta voz
– ¡¡¡¿¿Quién coño son la Alcaldesa de Marbella y sus concejales??!!!

Share

Simulaciones largas largas… para nada

No hay nada mejor que dejar todo un día corriendo una simulación para que al llegar a ver los resultados, haya habido un desbordamiento de las variables y aparezcan números negativos en los contadores de paquetes recibidos y en la probabilidad de bloqueo… Eso me pasa por usar «sólo» enteros largos. Es que claro, como sólo llega hasta 2147483647 (2^31 – 1).

Cambiamos las variables a enteros largos largos sin signo (máximo de 2^64 – 1 = 18446744073709551615) y a ver qué pasa.

Se supone que acabará antes de desbordarse, porque estaba bastante cerca de estabilizarse.

Share

Operaciones en punto flotante con Tcl

Una de las cosas no tan buenas de ns2 es que la interfaz usa el lenguaje Tcl (Toolkit command language) para definir las simulaciones y algunas cosas internas como los enlaces. Este lenguaje es interpretado, lo cual es bueno, pero su sintaxis es un poco engorrosa. Por si fuera poco, las operaciones en punto flotante son un poco delicadas, y he experimentado el hacer una división de dos enteros positivos y obtener un número negativo. Por ejemplo, el siguiente código:

set n_nodos 15
set burst_length 40000
set channels 8
set carga 1
set bandwidth 10000
set bw [expr $bandwidth * 1000000]

set mean_time [expr double(($n_nodos - 1) * $burst_length * 8) / double($channels * $carga * $bw)]

Da como resultado: -0.0027923583205257166

Esto lo descubrí al intentar simular una red con enlaces a 10 Gbps (de ahí el bandwidth=10000) con una carga normalizada a 1. De nada sirve colocarle la conversión explícita a double al hacer la división. La opción por la que opté en su momento fue hacer la operación en dos pasos:

set mean_time [expr double(($n_nodos - 1) * $burst_length * 8) / double($channels * $carga * $bandwidth)]
set mean_time [expr double($mean_time) / 1000000]

También es posible convertir a double el factor que multiplica los Mbps en la variable bw y conservar el resto del código anterior:

set bw [expr $bandwidth * double(1000000)]

Share

Más problemas de ns con Debian Etch

Una vez solucionados los problemas de configuración de ns con bash 3.1.x, al compilar me da un error también interesante:

queue/cbq.cc:1002: error: 'cbq_' was not declared in this scope
make: *** [queue/cbq.o] Error 1
Ns make failed!

Al parecer, no se lleva bien tampoco con GCC 4, por lo que he tenido que hacer un downgrade de gcc y g++ a la versión 3.4 para que compile.

Veremos qué nuevas sorpresas me depara el final de la compilación (o el próximo error de compilación).

Share