Ver Mensaje Individual
  #7  
Antiguo 06-02-2010
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Reputación: 25
Delphius Va camino a la fama
Hola,
Como he dicho, mucho del tema no se por lo que no soy el más indicado para hablar al respecto.

Tengo entendido que estos tipos de bibliotecas se basan en el uso de memoria dinámica. Es decir se reserva la cantidad de memoria según se necesite y rompiendo de este modo, al menos en parte, las limitaciones de la capacidad de los registros.

Para simplificar el escenario, hagamos el supuesto en que el número se representa como un arreglo (o array si prefieren) bien grande. En cada posición se almacena un número o parte de éste.

Los algoritmos de suma, resta, etc basandose en esta "estructura" van calculando dígito a dígito el valor, dependiendo de la posición que ocupan.

Respecto a los cálculos de senos, cosenos, y demás funciones trigonométicas, cálculo de pi, etc deberías consultar libros de cálculo numérico (o análisis numérico) y matemático. La gran mayoría de las funciones trigonométricas se basan en series de Taylor. Por ejemplo, se puede estimar el valor del seno, a la n-ésima sucesión, con la siguiente fórmula:

sin x = x - x^3/3! + x^5/5! - x^7/7! + ... + (-1)^n/(2n + 1)! x^2n+1

Puedes consultar y ver el desarrollo de cada función en los artículos de wikipedia, tal como lo hice para exponerla aquí El "chiste" es como implementar los cálculos para la estructura de los números bien grandes.

También que se puede estimar el valor de e, y pi como series, combinatorias, etc.

Implementar las operaciones básicas no suponen demasiado retos, cuando se tratan números manejables... y a mano. Pero en la implementación a grandes números, y de forma rápida y eficiente las cosas se ponen duras.

Por ejemplo, en el caso de la multiplicación por general el algoritmo que aplicamos a mano y el que nos enseñaron en la escuela ofrece una complejidad computacional estable y esperada (n^2), pero para grandes números es mejor optar por implementaciones más rápidas como los algoritmos de Schönhage–Strassen, Karatsuba, entre otros.

Recomiendo visitar este enlace para familiarizarse con los algoritmos de las operaciones matemáticas... y como dije darle muchas horas a leídas a los libros de cálculo/análisis numérico y matemáticos.

Y si se tiene pensado ir mucho más lejos, y se desea llevar manejos e implementaciones de matrices, etc. Ya, a modo de ejemplo, deben pensarse en implementaciones los más numéricamente estables y rápidas. En el caso del cálculo de los valores y vectores propios se recurre por lo general al uso de la factorización QR, y en caso de matrices simétricas reales puede recurrirse al método de Jacobi. Este último está un poco en desuso, pero se le reconoce que tiene mejor precisión que QR y tiene la particularidad de poder implementarse en computación paralela (algo que no es posible en QR).

Recomiendo además que se estudie sobre teoría de error... y familiarizarse con el término numéricamente estable... eso mayormente se trata en libros de análisis numérico (y en algunos de álgebra).

Esto lo digo por experiencia... ya que he pasado por cosas relacionadas con esto. Por ejemplo en términos algebraicos, y para un simple humano, esto:

a(b + c)

es igual a:

ab + ac

Pero en la práctica, numérica y computacionalmente hablando, el primero ofrece una mejor precisión que el segundo ya que el error relativo acumulado es menor. Al menos cuando se trata de números que una máquina puede procesar.... para los casos de grandes números y de precisión arbitraria creería que sucede algo similar.

Si todavía estás en la idea de darle rienda suelta a tu ingenio y elaborar tu propia biblioteca lo mejor es repasar mucho de cálculo y empezar a ver estudiar e investigar sobre los algoritmos más eficientes posibles. En teoría si se desean tener grandes números es para tener mejor precisión. Mejor precisión implica disponer de una buena cantidad de decimales y un error bajo.

Bueno, creo que dicho mucho y nada.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita