Hirdetés

Új hozzászólás Aktív témák

  • QuarK

    senior tag

    válasz Rover623 #565 üzenetére

    Felőlem jöhet egy két ínyencség... Bár cserébe nem sokat tudok ajánlani... Amikor öcsike ismerkedett az fdisk-kel, akkor a 2001 előtti cuccosaim mind odavesztek, kivéve egy-két dolgot, ami a régi 286-oson megmaradt, nagymamánál... :)) De azért akad: xms, pcx betöltés, max. 256 byte hosszú kulccsal való tömörítés (crytp, decrypt), crc ellenőrzés, planéták térbeli helyzetét kiszámító, majd állatövön elhelyező (aka. horoszkóp készítő) progi...

    Jah, és most jön a gonoszkodás ;] Bár ez pascal totyik, azért itt megjelenítem a témához, és szerintem nem nagy cucc átportolni pascalra (bár kell vele bajlódni, az fix)

    double pow( double y, double x)
    {
            typedef union
            {
                   double               d;
                   unsigned      u[4];
            } DBL;
            double         z, w, p, p2, q, re;
            unsigned       ex;
            int       iz;
            DBL       *yp, *zp, *wp;

            yp = ( DBL*)&y;
            if ( yp->d <= 0.0)
                   y = -y;
            z = 0.0;
            zp = ( DBL*)&z;
            zp->u[3] = yp->u[3] & ~0100017;
            iz = ( zp->u[3] >> 4) - 1023;
            if (( yp->d - zp->d) == 0.0)
                   z = ( double)iz;
            else
            {
                   yp->u[3] -= ++iz << 4;
                   yp->d *= 1.4142135623730950488;
                   p = ( yp->d - 1.0) / ( yp->d + 1.0);
                   p2 = p * p;
                   z = p * ( 2.000000000046727 + 
                         p2 * ( 0.666666635059382 + 
                         p2 * ( 0.4000059794795 + 
                         p2 * ( 0.28525381498 + 
                         p2 * 0.2376245609))));
                   z = z * 1.442695040888634 + ( double)iz - 0.5;
            }
            z *= x;
            w = 0.0;
            wp = ( DBL*)&w;
            if ( zp->d > 1023.0 || zp->d < -1023.0)
                   return ( 1E307);
            iz = ( int)zp->d;
            wp->u[3] += iz + 1023 << 4;
            wp->u[3] &= ~0100017;
            if (( zp->d -= ( double)iz) == 0.0)
                   return ( wp->d);
            while ( zp->d < 0.0)
            {
                   wp->u[3] -= 1 << 4;
                   wp->u[3] &= ~0100017;
                   zp->d++;
            }
            if ( zp->d >= 0.5)
            {
                   zp->d -= 0.5;
                   re = 1.41421356237309504880;
            }
            else
                   re = 1.0;
            p2 = zp->d * zp->d;
            p = zp->d * ( 7.2152891511493 + p2 *  0.0576900723731);
            q = 20.8189237930062 + p2 ;
            zp->d = re * wp->d * ( q + p) / ( q - p);
            return(zp->d);
    }

Új hozzászólás Aktív témák