ฉันจะคำนวณตัวเลขที่มีขนาดใหญ่มากใน Java ได้อย่างไร
ฉันได้ลองแล้วlong
แต่จะมีค่าสูงสุดที่ 9223372036854775807 และเมื่อใช้จำนวนเต็มมันบันทึกตัวเลขไม่เพียงพอดังนั้นจึงไม่แม่นยำเพียงพอสำหรับสิ่งที่ฉันต้องการ
มีรอบนี้หรือไม่?
ฉันจะคำนวณตัวเลขที่มีขนาดใหญ่มากใน Java ได้อย่างไร
ฉันได้ลองแล้วlong
แต่จะมีค่าสูงสุดที่ 9223372036854775807 และเมื่อใช้จำนวนเต็มมันบันทึกตัวเลขไม่เพียงพอดังนั้นจึงไม่แม่นยำเพียงพอสำหรับสิ่งที่ฉันต้องการ
มีรอบนี้หรือไม่?
คำตอบ:
คุณสามารถใช้BigInteger
คลาสสำหรับจำนวนเต็มและBigDecimal
สำหรับตัวเลขที่มีหลักทศนิยม ทั้งสองคลาสถูกกำหนดไว้ในjava.math
แพ็คเกจ
ตัวอย่าง:
BigInteger reallyBig = new BigInteger("1234567890123456890");
BigInteger notSoBig = new BigInteger("2743561234");
reallyBig = reallyBig.add(notSoBig);
ใช้BigInteger
คลาสที่เป็นส่วนหนึ่งของไลบรารี Java
http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigInteger.html
นี่คือตัวอย่างที่ได้รับตัวเลขจำนวนมากอย่างรวดเร็ว
import java.math.BigInteger;
/*
250000th fib # is: 36356117010939561826426 .... 10243516470957309231046875
Time to compute: 3.5 seconds.
1000000th fib # is: 1953282128707757731632 .... 93411568996526838242546875
Time to compute: 58.1 seconds.
*/
public class Main {
public static void main(String... args) {
int place = args.length > 0 ? Integer.parseInt(args[0]) : 250 * 1000;
long start = System.nanoTime();
BigInteger fibNumber = fib(place);
long time = System.nanoTime() - start;
System.out.println(place + "th fib # is: " + fibNumber);
System.out.printf("Time to compute: %5.1f seconds.%n", time / 1.0e9);
}
private static BigInteger fib(int place) {
BigInteger a = new BigInteger("0");
BigInteger b = new BigInteger("1");
while (place-- > 1) {
BigInteger t = b;
b = a.add(b);
a = t;
}
return b;
}
}
ชำระเงินBigDecimal
และBigInteger
.
import java.math.BigInteger;
import java.util.*;
class A
{
public static void main(String args[])
{
Scanner in=new Scanner(System.in);
System.out.print("Enter The First Number= ");
String a=in.next();
System.out.print("Enter The Second Number= ");
String b=in.next();
BigInteger obj=new BigInteger(a);
BigInteger obj1=new BigInteger(b);
System.out.println("Sum="+obj.add(obj1));
}
}
ขึ้นอยู่กับว่าคุณกำลังทำอะไรอยู่คุณอาจต้องการดู GMP (gmplib.org) ซึ่งเป็นไลบรารีที่มีความแม่นยำสูงประสิทธิภาพสูง หากต้องการใช้ใน Java คุณต้องมี JNI wrapper รอบ ๆ ไลบรารีไบนารี
ดูรหัส Alioth Shootout สำหรับตัวอย่างการใช้แทน BigInteger เพื่อคำนวณ Pi เป็นจำนวนหลักโดยพลการ
https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/pidigits-java-2.html
9223372036854775807
คือค่าที่แน่นอนของLong.MAX_VALUE
อย่างไรก็ตาม