mi mini punto de referencia:tiempo de multiplicación en 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();
}
}
Mide el tiempo de multiplicación de n dígitos BigInteger
Resultado:
Se puede ver fácilmente la tendencia, pero por qué hay gran ruido por encima de 50000 dígitos? ¿Es por el recolector de basura o hay algo más que afecte mis resultados? Al realizar la prueba, no se ejecutaban otras aplicaciones.
Resultado de la prueba con solo dígitos impares. La prueba fue más corto (n = 1000, K = 100)
dígitos impares (n = 10.000, k = 10)
Como se puede ver que hay una gran ruido entre 65.000 y 70000. me pregunto por qué ...
dígitos impar (n = 10 000, K = 10), System.gc()
cada 1000 iteraciones resultados en ruido entre 50000-70000
No hay forma de saber con la información que ha mostrado. ¿Por qué no pruebas un 'System.gc()' cada 500-1000 iteraciones para ver si eso lo suaviza. – hvgotcodes
"No se ejecutaban otras aplicaciones". ¿Estás en un entorno informático en tiempo real sin un sistema operativo de tiempo compartido (como Windows)? Es imposible garantizar que cada ciclo de CPU se asigne solo a su aplicación. – mellamokb
Sry para salir del tema pero, ¿con qué programa estás tramando? – keyser