#!/usr/local/bin/perl -w # use bignum (p,-50); # no es necesario para conseguir precisión $h=$h0=$m=$seg=$flag=0; while ($h0<=12){ if ($h*60<=12*$m && $flag==0) { print int($h),":",int($m),":$seg"; print "\t\t$h:$m\n"; $flag=1; } $s++; $seg= $s % 60; # digital $m += 1 /(60*1000); # analogic, precision could be 1/(60*BIG M) if ($m>=60) { $m-=60; $flag=0; $h0++; } # $h += 1/(12*60); # wrong: with 2 engines does not work $h = $h0 % 12 + $m/(60); } __END__ Reloj analógico: ¿Cuándo coinciden las manecillas? Pues a todas horas menos a las 11. Estos son los resultados con long doubles en un ordenador de 32 bits: 0:0:0 0:0 1:5:33 1.09090916666670907:5.454550000002544 2:10:6 2.18181833333341792:10.9091000000050752 3:16:39 3.27272750000012677:16.3636500000076063 4:21:11 4.36363638888905785:21.8181833333434708 5:27:44 5.4545455555557667:27.2727333333460019 6:32:17 6.54545472222247681:32.7272833333486088 7:38:50 7.63636388888919513:38.1818333333517076 8:43:22 8.72727277777813566:43.6363666666881398 9:49:55 9.81818194444485398:49.0909166666912387 10:54:28 10.9090911111115723:54.5454666666943376 0:0:0 5.12830056198509965e-13:3.07698033719105979e-11 BUGS El error es pequeño, lo que se pone de manifiesto al no llegar exactamente a las 12:0