Cripto
Cripto

Reputation: 3751

proper way to store large numbers in a variable

I would like to play around with numbers and however elementary, Ive been writing algorithms for the fibonacci sequence and a brute force path for finding prime numbers!

Im not a programmer, just a math guy.

However, a problem I run into quiet often is that a long long, double and floats often run out of room.

If I wanted to continue to work in JAVA, in what way can I create my own data type so that I dont run out of room.

Conceptually, I thought to put 3 doubles together like so,

public class run {

    static double a = 0;
    static double b = 0;
    //static double c = 0;

    static void bignumber(boolean x) {

        if (x == true && a < 999999999) {
            ++a;

        } else if (x == true && a == 999999999) {
            ++b;
            a = 0;
        }
        System.out.print(b + "." + a + " \n");
    }

    public static void main(String[] args) {
        while(true) {
        bignumber(true);

        }
    }

}

is there a better way to do this,

I would like to one day be able to say

mydataType X = 18476997032117414743068356202001644030185493386634 10171471785774910651696711161249859337684305435744 58561606154457179405222971773252466096064694607124 96237204420222697567566873784275623895087646784409 33285157496578843415088475528298186726451339863364 93190808467199043187438128336350279547028265329780 29349161558118810498449083195450098483937752272570 52578591944993870073695755688436933812779613089230 39256969525326162082367649031603655137144791393234 7169566988069

or any other number found on this site

I have also tried

package main;

import java.math.BigInteger;

public class run {
    BigDecimal a = 184769970321174147430683562020019566988069;
    public static void main(String[] args) {

    }

}

But it still seems to be out of range

Upvotes: 1

Views: 932

Answers (3)

Mordechai
Mordechai

Reputation: 16302

Use BigDecimal (instead of double), and BigInteger (instead of int, long) for that purpose, But you can only work with them by their methods. No operators, can be used.

Used like this:

BigInteger big = new BigInteger("4019832895734985478385764387592") // Strings...
big.add(new BigInteger("452872468924972568924762458767527");

Same with BigDecimal

Upvotes: 3

Mircea Ispas
Mircea Ispas

Reputation: 20800

You can store large numbers like this:

  • length
  • digits[]

and implement your math for them. This is not very complicated. As a hint, to make everything more simple you can store the digits in reverse order. This will make your math simpler to implement - you always add nr[k] with nr[k] and have room for transport for any length numbers, just remember to fill with 0 the shorter one.

In Knuth Seminumeric Algorithms book you can find a very nice implementation for all operations.

Upvotes: 0

Ren
Ren

Reputation: 3455

BigDecimal is the class used in java where you need to represent very large or very small numbers, and maintain precision. The drawbacks are that it is not a primitive, so you can't use the normal math operators (+/-/*/etc), and that it can be a little processor/memory intensive.

Upvotes: 1

Related Questions