PDA

Ver la Versión Completa : Dividir números muy grandes en COBOL


Josber
12 de abril de 2015, 18:02
Todos sabemos que COBOL, no soporta más de 18 dígitos, incluidos los decimales, ¿qué pasa cuando queremos hacer un cálculo para un número grande?, por ejemplo para calcular el DC de una cuenta de un banco, (que son 20 dígitos, 24 con el IBAN), hay una manera muy sencilla de hacerlo, y da lo mismo el tamaño del número que queramos dividir:



Partimos el número en números más pequeños, tantos como necesitemos, por supuesto, los números que sean más grandes que el divisor, si no, nos vamos a hinchar a hacer cálculos.
Dividimos la primera parte entre el DIVISOR y sacamos la PARTE ENTERA del resto.
Ésta parte entera del RESTO, la añadimos al principio de la siguiente parte del número.
Repetimos los puntos 2 y 3, así hasta terminar todas las partes en las que hayamos dividido el número grande (el número original).
Por último, concatenamos cada una de las partes enteras de la división en orden, y la última parte con los decimales incluidos.


* Por ejemplo:

69823657153 dividido entre 97 (69823657153 / 97) = 719831517,041237

- Partimos el número en 2 partes: 698236 y 57153
- Dividimos: 698236 / 97 = 7198,309278 (el mod 97 es 30)
- Añadimos el 30 al principio de la siguiente parte del numero: 3057153
- Dividimos: 3057153 / 97 = 31517,041237
- Concatenamos: 7198 y 31517,041237 = 719831517,041237

Espero que os sirva de algo :mafia:

Un saludo.-

Kuk
27 de abril de 2015, 17:29
Josber, creo que hablas de campos puros COBOL. Porque en C++ por ejemplo existen estos tipos:


Size Unique representable values Notes
8-bit 256 = 2 in 8
16-bit 65 536 = 2 in 16
32-bit 4 294 967 296 = 2 in 32 (~4 billion)
64-bit 18 446 744 073 709 551 616 = 2 in 64 (~18 billion)


Pero PowerCOBOL tiene equivalentes de esos campos. El equivalende de DOUBLE (que es el mas grnade, 2 en 64), seria PIC S9(18) COMP-5.

Josber
2 de mayo de 2015, 10:30
Correcto Kuk, aún así como curiosidad también sirve, por si alguien lo quiere hacer con una calculadora de 8 dígitos ;) ;)


Un saludo.-

Kuk
2 de mayo de 2015, 21:44
Josber, claro que sirve. Lo mio solo era un comentario! :amigo: