benchmark nhỏ của tôi:Nhân thời gian trong BigInteger
import java.math.*;
import java.util.*;
import java.io.*;
public class c
{
static Random rnd = new Random();
public static String addDigits(String a, int n)
{
if(a==null) return null;
if(n<=0) return a;
for(int i=0; i<n; i++)
a+=rnd.nextInt(10);
return a;
}
public static void main(String[] args) throws IOException
{
int n = 10000; \\number of iterations
int k = 10; \\number of digits added at each iteration
BigInteger a;
BigInteger b;
String as = "";
String bs = "";
as += rnd.nextInt(9)+1;
bs += rnd.nextInt(9)+1;
a = new BigInteger(as);
b = new BigInteger(bs);
FileWriter fw = new FileWriter("c.txt");
long t1 = System.nanoTime();
a.multiply(b);
long t2 = System.nanoTime();
//fw.write("1,"+(t2-t1)+"\n");
if(k>0) {
as = addDigits(as, k-1);
bs = addDigits(as, k-1);
}
for(int i=0; i<n; i++)
{
a = new BigInteger(as);
b = new BigInteger(bs);
t1 = System.nanoTime();
a.multiply(b);
t2 = System.nanoTime();
fw.write(((i+1)*k)+","+(t2-t1)+"\n");
if(i < n-1)
{
as = addDigits(as, k);
bs = addDigits(as, k);
}
System.out.println((i+1)*k);
}
fw.close();
}
}
Nó đo thời gian nhân của n chữ số BigInteger
Kết quả:
Bạn có thể dễ dàng nhận thấy xu hướng này nhưng tại sao có quá tiếng ồn lớn trên 50000 chữ số? Đó là do bộ thu gom rác hoặc có điều gì khác ảnh hưởng đến kết quả của tôi không? Khi thực hiện kiểm tra, không có ứng dụng nào khác đang chạy.
Kết quả từ thử nghiệm chỉ với các chữ số lẻ. Xét nghiệm này là ngắn hơn (n = 1000, k = 100)
chữ số Odd (n = 10000, k = 10)
Như bạn có thể thấy có một tiếng động rất lớn giữa 65000 và 70000 tôi tự hỏi tại sao ...
chữ số Odd (n = 10000, k = 10), System.gc()
mỗi 1000 lần lặp Kết quả trong tiếng ồn giữa 50000-70000
Không có cách nào để biết thông tin bạn đã hiển thị. Tại sao bạn không thử 'System.gc()' cứ lặp lại 500-1000 để xem nó có làm mịn nó không. – hvgotcodes
"Không có ứng dụng nào khác đang chạy". Bạn có đang ở trong môi trường máy tính thời gian thực không có hệ điều hành chia sẻ thời gian (như Windows) không? Không thể đảm bảo mọi chu kỳ CPU chỉ được cấp phát cho ứng dụng của bạn. – mellamokb
Sry để thoát khỏi chủ đề nhưng, bạn đang vẽ chương trình gì? – keyser