Деян Йосифов

 Personal Website & Blog

BigInteger за JavaScript

Written By: Деян - Apr• 21•13

Малко преди първия изпит по JavaScript в академията на Телерик, реших да си напиша един BigInteger за всеки случай, ако случайно ми се наложи да правя сметки с големи цели числа. Като цяло си припомних детските години, в които ни учеха да събираме, изваждаме и делим числа :), което ако трябва да  съм честен се оказа не чак толкова  тривиална задачка. 🙂

За имплементацията на моя BigInteger съм използвал представяне на числата под формата на масив от цифри. Не е най-ефективното решение предвид че за всяка цифра от 1 до 9 използвам число в JavaScript, което по принцип е в доста по-големи граници. Бих се пробвал като намеря време да направя нова имплементация, която вътрешно използва не масив от всички цифри, ами такъв от по-големи числа, така че да не се налага да заделям толкова излишна памет за едно многоцифрено число.

Въпреки тези недостатъци трябва да кажа, че все пак имплементацията работи доста бързо и поне аз след известно тестване не съм намерил някакви проблеми с бързодействието.

Ето линк към моя GitHub профил, където може да се свали имплементацията:

GitHub link: BigIntegerDPY

Към самия файл най-отгоре съм прикачил и кратка документация, обясняваща основните функционалности на обекта. Ето и един цитат към нея.

///This JS object was written by Deyan Yosifov.
///BigInteger keeps an integer number with infinite number of digits.
///It supports functions plus, minus and multiply which return another BigInteger object
///Also has toString() and toNum functions in it.
///for parsing long numbers from string use parseToBigInteger(str)
///for parsing from small number use new BigInteger(num)
///for parsing from array of digits use new BigInteger(array, hasMinusSign)

Мисля че след известно тестване съм изчистил всички бъгове и обекта работи напълно коректно, но все пак ако някой открие някакви такива бих се радвал да сподели. 🙂

You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

Leave a Reply

Your email address will not be published. Required fields are marked *