Página 1 de 1

Limite numerico??

Publicado: 04 Ene 2011, 01:16
por joanfran55
Hola a todos, ¿no habría ninguna manera de que el autoit pudiese operar con números mayores a 9223372036854775807?
Estos diseñando un programilla de cálculo, pero no puedo trabajar con valores más altos.

Saludos y gracias por vuestra ayuda.

Re: Limite numerico??

Publicado: 06 Ene 2011, 21:50
por joanfran55
Bueno, sumándole al resultado 0.000000000001-0.000000000001 interpreta ya que es un numero muy grande y lo pone en notación científica, con eso puede llegar hasta límites insospechados. Con esto me sirve.

Un saludo!

Re: Limite numerico??

Publicado: 07 Ene 2011, 19:12
por Chefito
Mmmmm....si te digo la verdad, no se mucho del límite que tiene AutoIt con la representación de sus tipos numéricos. Parece que el número que dices es el mayor por arriba que puede representar autoit de un tipo entero largo.
Si tu intención es hacer cálculos muy grandes y que necesiten mucha potencia, no te recomiendo para nada autoit. Para esas cosas hay lenguajes específicos, con mucha potencia de cálculo y muchas funciones. Incluso casi cualquier otro lenguaje (c, c++, .net, java, etc) es mucho más rápido para este tipo de cosas.

Bueno, ahora al lío :smt001 . No hace falta que le sumes eso que dices anteriormente, lo cual no está bien hecho. Una cosa es trabajar con números enteros grandes y otra con números decimales, los cuales si son muy grandes se representan con notación científica. Son dos tipos distintos.
Tú si le pones un decimal a cualquier número muy grande en autoit te lo va a representar en notación científica. Ejemplo:

Código: Seleccionar todo

ConsoleWrite(12312312312312312312312313123123.0)
Pero esto tiene un problema, que los dígitos que no coge te los va a poner a 0, redondeando el último que coja. Y te aseguro que no es lo mismo 12312312312312312312312313123123 que 1.23123123123123e+031=12312312312312300000000000000000, como puedes ver.
Si quisiese hacer algo preciso, tendrías que hacer tus propias funciones. Puede que en el foro ingles haya alguna udf matemática ya hecha. Prueba a buscar.
Por ejemplo, una función que sumase cualquier número entero (de cualquier longitud), a groso modo, su algoritmo podría ser que sumase dígito a dígito todos los dígitos que forman los dos números y que se fuesen añadiendo a una variable string (una cadena). Tendrías que ir guardando el acarreo para ir sumándose a las sumas posteriores. Una vez que uno de los números se hubiese quedado sin dígitos que sumar (su cadena tuviese una longitud 0), y no hubiese acarreo, la suma se podría acabar y añadirle los dígitos restantes del otro número. Mmmmmm.....creo que no me he explicado demasiado bien :smt005 .
Así con todas las operaciones. Todas tienen una forma de hallarse, algunas más faciles que otras.

Saludos.

Re: Limite numerico??

Publicado: 11 Ene 2011, 13:43
por Ximorro
Efectivamente este es un problema debido a la representación interna de los números en binario en los registros y circuitos de la CPU y componentes asociados.
Estás tocando un tema del núcleo del diseño de computadoras y por lo tanto no es cosa exclusiva de AutoIt.

Como ves no es lo mismo usar números enteros que números reales (con decimales). Los enteros son precisos, pero tienen un límite (por ejemplo autoIt usa enteros de 64bits, un valor típico actualmente), los reales tienen rangos muchísimo más amplios, pero no son precisos en el sentido que aunque puedes representar números gigantestos, estás limitado en el números de cifras que se pueden almacenar (el el formato double que usa Autoit, unas 16)

Sí hay sistemas ya hechos para usar números de tamaño arbitrario (o al menos hasta que se acaba la memoria del ordenador, claro ;-) ) pero son mucho más lentos pues son "trucos" y no usan directamente las operaciones aritméticas internas de los procesadores. En Java y varios C hay clases muy conocidas para ello, en AutoIT resulta que sí hay algo parecido en el foro inglés, la udf BigNum, en caso de necesidad aquí la tienes:
http://www.autoitscript.com/forum/topic ... _p__597491

En mis pruebas con números primos:
http://www.emesn.com/autoitforum/viewto ... imos#p6547
enseguida me encontré con estos límites, pero también comprobé que AutoIt no es el lenguaje más indicado para hacer matemáticas de cálculo masivo. Como dice Chefito si vas a hacer cálculos cañeros me temo que tendrás que pensar en otro lenguaje.
Por cierto, pasé el programa de números primos a BigNum (modificado para velocidad) para poder probar el método de Miller-Rabin, que sólo es interesante para números gigantescos, pero era lentíiiisimo. Lentísimo es mejor que imposible, así que BigNum tiene su utilidad, pero ya te digo que ira mucho mejor en lenguajes compilados.

¡Buena suerte!