Anuncio

Colapsar
No hay ningún anuncio todavía.

Probando las limitaciones del C

Colapsar
X
 
  • Filtro
  • Hora
  • Mostrar
Borrar todo
nuevos mensajes

  • Otros Probando las limitaciones del C

    Tengo un procesador 2.7 Ghz, 3.25 GB de RAM a 667 Mhz, sistema operativo 32 bits, y estoy probando las capacidades del Mathematica, Matlab y el leguaje C para sacar una cuenta y ver con cual me quedo, en el Mathematica es esta:

    Código:
    u1 = 10.89;
    v1 = 79.21;
    u2 = 10.89 + 0.0023;
    v2 = 79.21 + 0.0071;
    area = 0;
    y1 = 3.3;
    x1 = 8.9;
    y2 = 0;
    x2 = 0;
    anss = 0;
    For[i = 1, i < 1000, i++,
     For[ii = 1, ii < 1000, ii++,
        anss = (v2 - v1)*(u2 - u1)*(1/(4*Sqrt[u1*v1]));
            area = area + anss;
            y1 = y1 + 0.0071;
            y2 = y1 + 0.0071;
            v1 = y1^2;
            v2 = y2^2;
        ]
       x1 = x1 + 0.0023;
         x2 = x1 + 0.0023;
         u1 = x1^2;
         u2 = x2^2;
         y1 = 8.9;
     ]
    Print[area]
    y la basura de progama ese lo resuelve en largos 12.61 segundos e imprime que el resultado es 16.2904

    Por otro lado el Matlab:

    Código:
    clear;
    u1=10.89;
    v1=79.21;
    u2=10.89+0.0023;
    v2=79.21+0.0071;
    area=0;
    y1=3.3;
    x1=8.9;
    y2=0;
    x2=0;
    anss=0;
    for i=1:1000
        for ii=1:1000
            anss=(v2-v1)*(u2-u1)*(1/(4*sqrt(u1*v1)));
            area=area+anss;
            y1=y1+0.0071;
            y2=y1+0.0071;
            v1=y1^2;
            v2=y2^2;
        end
            x1=x1+0.0023;
            x2=x1+0.0023;
            u1=x1^2;
            u2=x2^2;
            y1=8.9;
    end
    disp (area)
    clear;
    sí que se hace respetar, apenas suelto tardaría no más de 0.200 segundos arrojando un 16.3228 como resultado.

    Pero cuando lo hago en C:

    Código:
    /* coordenadas curvilineas */
    
    #include <stdio.h>
    #include <math.h>
    
    float u_1, v_1, u_2, v_2, area, y_1, x_1, y_2, x_2, anss;
    
    int i, ii;
    
    char desicion;
    
    u_1=10.89;
    v_1=79.21;
    u_2=10.89 + 0.0023;
    v_2=79.21 + 0.0071;
    area=0;
    y_1=3.3;
    x_1=8.9;
    y_2=0;
    x_2=0;
    anss=0;
    
    void main()
    {
    printf("iniciar? ");
    scanf("%s", &desicion);
    if ((desicion=='s')||(desicion=='S'))
      {
      for(i=1; i<1000; i++)
        {
          for(ii=1; ii<1000; ii++)
            {
              anss=(v_2-v_1)*(u_2-u_1)*(1/(4*sqrt(u_1*v_1)));
              area=area+anss;
              y_1=y_1+0.0071;
              y_2=y_1+0.0071;
              v_1=pow(y_1,2);
              v_2=pow(y_2,2);
            }
          x_1=x_1+0.0023;
          x_2=x_1+0.0023;
          u_1=pow(x_1,2);
          u_2=pow(x_2,2);
          y_1=8.9;
        }
        printf("\n el area es %f ", area);
      }
    }
    Aparte de que me arroja unos 26 warning(s), (aunque se compila con el Microsoft Visual C++), me arroja un 16.210197 como resultado tardando menos que el Matlab. Pero cuando aumento las iteraciones de los bucles for a 10000, cláro con su respectivo decremento en el aumento de las variables y_1 y x_1, etc, pero la cuestión es que cuando compilo ésto:

    Código:
    /* coordenadas curvilineas */
    
    #include <stdio.h>
    #include <math.h>
    
    float u_1, v_1, u_2, v_2, area, y_1, x_1, y_2, x_2, anss;
    
    int i, ii;
    
    char desicion;
    
    u_1=10.89;
    v_1=79.21;
    u_2=10.89 + 0.00023;
    v_2=79.21 + 0.00071;
    area=0;
    y_1=3.3;
    x_1=8.9;
    y_2=0;
    x_2=0;
    anss=0;
    
    void main()
    {
    printf("iniciar? ");
    scanf("%s", &desicion);
    if ((desicion=='s')||(desicion=='S'))
      {
      for(i=1; i<10000; i++)
        {
          for(ii=1; ii<10000; ii++)
            {
              anss=(v_2-v_1)*(u_2-u_1)*(1/(4*sqrt(u_1*v_1)));
              area=area+anss;
              y_1=y_1+0.00071;
              y_2=y_1+0.00071;
              v_1=pow(y_1,2);
              v_2=pow(y_2,2);
            }
          x_1=x_1+0.00023;
          x_2=x_1+0.00023;
          u_1=pow(x_1,2);
          u_2=pow(x_2,2);
          y_1=8.9;
        }
        printf("\n el area es %f ", area);
      }
    }
    tarda unos 23.43 segundos y arroja un 4.000000 como resultado, obviamente algo está malo, primero, no debería de tardar tanto, ya que si con 1000 iteraciones es más rápido que el Matlab, con 10000 debería tardar igual o menos que el Matlab con 10000 iteraciones, y segundo el 4.000000 no es el resultado esperado, haber si pueden ayudarme?

    Ya que con el matematica, el cálculo con 10000 iteraciones, tarda como 8 minutos y es ostinante esperar tanto, mientras que el Matlab tarda como 5.5 segundos con 10000 iteraciones y arroja un 16.3293.

    Tambien, como ven los resultados son muy distintos aunque sea la misma cantidad de interaciones en cada código, entonces cual creen ustedes que sea el mejor resultado, o mejor programa para ésto?

    EDITO:

    Despues que publiqué el mensaje me di cuenta que no mensioné para que diablos es el calculo, pero bueno, es para verificar un cambio de variables, y , en esta inetgral doble:

    Última edición por natanael; 10/08/2011, 05:41:21. Motivo: Decir para que es el calculo.
    sigpic Escrito por pod: Así que crear vida no es más que poner todos los ingredientes básicos en un medio donde puedan ir reaccionando. Y esperar que se acaben produciendo las reacciones necesarias, para que se vayan formando los compuestos adecuados.
    Escrito por Mandinguita: Podemos entender la vejez como un proceso de acumulación de entropía, hasta que llega a niveles incompatibles con mantener un organismo estructurado y el ser vivo muere.

Contenido relacionado

Colapsar

Trabajando...
X