Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - MinusFour

#2291
Cita de: engel lex en 25 Enero 2015, 08:04 AM
uff como se nota que tienes algo decente en relacion a mi perolita que recien revivió en estos dias jejeje

en relación a 23 segundos para mi jejeje

a que te refieres con "el costo"?

Tiempo, memoria, uso de cpu, etc.
#2292
Cita de: engel lex en 25 Enero 2015, 07:39 AM
realmente la doble precisión es poco importante en este caso, y el compilador (netbeans) me muestra el tiempo de ejecución, siendo similar al del ejecutable, fijate que incluso lo imprimo sin decimales porque no los quería :s (los decimales representarían menos de 1/1000% de diferencia ya que los tiempos manejados están en el orden de >20segundos)

sobre el ciclo tienes razón... se me pasó esa comparacion... igual, haciendo los cambios

cambiando la linea 35 tanto de C y la 32 de Java a
for(control_for = 5; numero >= control_for * control_for; control_for+=6){

y cambiando en C la linea 26 a
printf("pasaron %.2f millisegundos",(double)(endTime-startTime)/1000);

sigo teniendo un margen de (a 1.000.000 de primos) C con 23 segundos y Java con 26 segundos, sigue estando en el orden de 15%...  entonces Java hace muy buen trabajo, mucho mejor de la reputación que le dan... o no? mi comparación no toca puntos reales? (me refiero juego solo con velocidad de procesamiento y eficiencia de asignación a memoria que es con lo que juego aquí)

Realmente no me habia dado cuenta de la resolucion de tiempo, que es milisegundos. (CLOCK_PER_SEC son microsegundos).

Realmente si corres el codigo de Java sin ser optimizado por la maquina virtual:

╭─m1n054@ALEXPC ~/d/java
╰─ ❯❯❯ java -Xint NumerosPrimos                                                                                                                                                                                ⏎
pasaron: 22911 millisegundos


Optimizado:

╭─m1n054@ALEXPC ~/d/java
╰─ ❯❯❯ java NumerosPrimos
pasaron: 8174 millisegundos


Sin optimizar en C:

╭─m1n054@ALEXPC ~/d/gcc
╰─ ❯❯❯ ./ex2

Encontramos 1000000 numeros primos
Tiempo elapsado: 8515.194000


Optimizado en C (-Ofast):

╭─m1n054@ALEXPC ~/d/gcc
╰─ ❯❯❯ ./ex2

Encontramos 1000000 numeros primos
Tiempo elapsado: 7422.899000


No estoy seguro del costo de las optimizaciones por el JRE pero para C deben ser nulas (bueno, tecnicamente tarda mas en compilar).
#2293
Cita de: engel lex en 25 Enero 2015, 05:47 AM
hola! siempre había pensado que Java sería mucho más lento que C... pero estuve haciendo pruebas y rebate mi teoría a un punto despreciable... no se si es error mio o que, pero compilo el código que pondré a continuación en Java y en C y el tiempo es MUY similar (diferencia menos de 10%)

antes que nada quisiera dejar claro que no se Java... hice la conversión como pude...

quisiera que uds opinaran, me dijeran si mi método de evaluación está mal o si solo eran mis creencias...

los pongo a competir en algo donde pueden pelear con características tan similares como sea posible... calculando n números primos... y haciendo ambos códigos tan idénticos como es posible... dejo a continuación mis pruebas

a 1.000.000 de primos generados y almacenados en el array, C tarda en promedio 23 segundos y Java 25...

El codigo en C
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int es_primo(long numero);

int main(int argc, char** argv) {
   clock_t startTime = clock();
   int cantidad = 1000000;
   int encontrados = 0;
   long numero = 1;
   long primos[cantidad];
   while(encontrados < cantidad){
       numero++;
       if(es_primo(numero)){
           primos[encontrados++] = numero;
       }
   }
   clock_t endTime = clock();
   /*
   int i;
   for(i=0;i<cantidad; i++){
       printf("%d-",primos[i]);
   }
   */
   printf("pasaron %d millisegundos",(endTime-startTime)/1000);


   return (EXIT_SUCCESS);
}
int es_primo(long numero){
   long control_for = 0;
   if(numero <= 3) return 1;
   if(numero % 2 == 0 ||numero % 3 == 0) return 0;
   for(control_for = 5; numero > control_for * control_for; control_for+=6){
       if(numero % control_for == 0 || numero % (control_for + 2)==0) return 0;
   }
   return 1;
   }


el codigo en java
Código (java) [Seleccionar]
package numerosprimos;

import java.util.*;
import java.lang.*;
import java.io.*;

public class NumerosPrimos {

   public static void main (String[] args){

       long startTime = System.currentTimeMillis();
       int cantidad = 1000000;
       int encontrados = 0;
       long numero = 1;
       long[] primos = new long[cantidad];
       while(encontrados < cantidad){
           numero++;
           if(es_primo(numero)){
               primos[encontrados++] = numero;
           }

       }
       long endTime = System.currentTimeMillis();
       //System.out.println(Arrays.toString(primos));
       System.out.println("pasaron: " + (endTime - startTime) + " millisegundos");

   }
   public static boolean es_primo(long numero){
       long control_for = 0;
       if(numero <= 3) return true;
       if(numero % 2 == 0 ||numero % 3 == 0) return false;
       for(control_for = 5; numero > control_for * control_for; control_for+=6){
           if(numero % control_for == 0 || numero % (control_for + 2)==0) return false;
       }
       return true;
   }
   
}


Edit: Me doy cuenta que la resolucion de los dos numeros estan en Milisegundos!

Bueno aqui hay un error nada mas con lo de los primos:


for(control_for = 5; numero > (control_for * control_for); control_for+=6){


El cuadrado de los primos devuelve que es primo porque el cuadrado de los primos tecnicamente no es menor al cuadrado de los primos.
#2294
Bueno, siempre es bueno tener una copia por seguridad, asi que lo del PhotoRec esta bien. Al terminar el backup prueba a usar TestDisk para restaurar la tabla de particiones.

TestDisk: http://www.cgsecurity.org/wiki/TestDisk

Los pasos a seguir son muy parecidos a estos: https://www.youtube.com/watch?v=O_kvJF87Drc

Al parecer ese mensaje puede aparecer porque hay metadata de RAID. Si el disco duro realmente no se esta usando en RAID lo que puedes hacer es simplemente eliminar la metadata:

Código (bash) [Seleccionar]

# Necesitas dmraid, no se si Hirens-Boot la tenga.
# Deberias poder usar el comando desde un liveCD.
sudo dmraid -r -E /dev/sdc


Claro que te recomiendo hacer un backup primero.

Fuente: http://ubuntuforums.org/showthread.php?t=2038880

Edit: El tipo de particion parece ser que usa FAT16, tambien puedes probar montarlo con:

Código (bash) [Seleccionar]

sudo mount -t vfat /dev/sdc1 /mnt/hd


/mnt/hd debe existir creo, no estoy seguro.
#2295
Cita de: Graphixx en 25 Enero 2015, 03:45 AM
Antes o despues del for ?  :xD

Debe ser antes.
#2296
Foro Libre / Re: block de notas ilegible
24 Enero 2015, 19:03 PM
Cita de: jucasa en 24 Enero 2015, 18:43 PM
alguien me podria traducir el texto que copie,yo no logro pasarlo a texto normal
con  convertidores rtf .,un saludo y gracias

Abrelo con Wordpad > Seleciona el texto > Copialo a Notepad. Si eso no funciona, sube el RTF a algún lado.
#2297
¿Puedes poner el modelo y marca de tu Disco Duro Externo?
#2298
Foro Libre / Re: block de notas ilegible
24 Enero 2015, 03:43 AM
¿Parece que guardaste el documento como rtf? ¿Seguro y no fue wordpad?
#2299
GNU/Linux / Re: Problema con bugtraq
23 Enero 2015, 18:09 PM
¿Y eso no te deja bootear? Mejor conectate por cable para hacer la instalacion de tu bugtraq y desactiva el wifi. Despues haces la instalación del driver propietario de realtek.
#2300
Comenta la linea del srand o prueba con:

Código (php) [Seleccionar]

mt_srand((double)microtime(true) * 1000000);


Edit: Y muevela fuera del for.