geldim okuldan şimdi : ) söylediğim gibi javada yapmıştım ben algoritması anlaşılır sanırım zaten php olarakta yapabiliriz tabi ki .
bu kadar veri tipi dönüş tipi yazmak zorunda kalmazdık ayrı mesele

system.out.println(matematik.KareKok(5));
public class matematik {
    public static double Ussu(double sayi, int us) {
        double sonuc = 1;
        for (int i = 1; i <= us; i++)
            sonuc *= sayi;
        return sonuc;
    }
    public static double KareKok(float sayi) {

        double us = 0;
        int temp = 1;
        Boolean tamamdir = false;
        for (int i = 1; i <= sayi; i++) {
            us = matematik.Ussu(i, 2);
            if (us == sayi) {
                tamamdir = true;
                temp = i;
                break;
            } else if (us > sayi) {
                break;
            }
            temp = i;
        }
        double don = temp;
        if (tamamdir == false) {
            double us2 = 0;
            for (double j = us; j > temp; j = j - 0.01) {
                us2 = matematik.Ussu(j, 2);
                if (us2 <= sayi) {
                    don = j;
                    break;
                }
            }
        }
        return don;
    }

}