Stránka: 1 z 1
| [ Príspevkov: 10 ] | |
Autor | Správa |
---|
Registrovaný: 14.01.12 Prihlásený: 20.07.13 Príspevky: 46 Témy: 9 | 9 |
zdravim, pls help.mam problem s nasl. fciou. Ide o fatal error : Allowed memory size of bytes exhaust. s odporucanim alokovat 24 B. Nasledne som vyguglil jednoduchy prikaz "ini_set('memory_limit','128M');", kde som zvysoval od 24 vyssie a po 128 s tym ze aj poziadavka na velkost pamate sa stale zvysovala. Fcia mi ma vratit maticu, s tym ze neskor bude posielana do druheho suboru kde vykreslujem pomocou GD. To ale neni podstatne, tiez som poprehadzoval mocninove prepocty z pow(n,2) na n*n cim som vlastne odsuval chybovy riadok, ale stale pytalo vacsiu alokaciu, a neskor uz bol problem s presiahnutim defaultneho execution time (30s). Tak si teda neviem rady. POZNAMKA: v argum. fcie su aj samotne indexy potom tu fciu volam cyklicky. Napada ma ci to nie je prilis narocne na mnozstvo kopii funkcii..ale neviem. vie miekto poradit co s tym ?..DAKUJEM Kód: function last_space($o, $p, $r, $s, $t, $u, $v)// args[A, B, x, d, diff_1, index, index] { $matrix= array(array());// [0][i] - stredy // [1][i] - spojnice2 // [2][i] - vysky // for($i = 1, $j = 0 ; $j < floor($o / $s) ; $i+=2, $j++) { $matrix[0][$j] = $i * $r; }
for($i = 1 ; $i < 5 ; $i++) { for($j = 0 ; $j < floor(count($matrix[0])) ; $j++) { $matrix[$i][$j]=0;// nulovanie zvysku - v tele fcie budu prepisane podla potreby } }
$vertic = ($p - $r) - ($s + (floor(($p - $s)/($s - $t)) - 1) * ($s - $t) - $r); $horizont = $s;
$n = 1; $q = $m = $f = 0;
while($o - $f >= $r) { $spojnica = sqrt($vertic * $vertic + $horizont * $horizont); $gamma = rad2deg(acos(($s * $s + $s * $s - $spojnica * $spojnica) / (2 * $s * $s))); $alfa = (180 - $gamma) / 2; $alfa_ = rad2deg(acos($vertic * $vertic + $spojnica * $spojnica - $horizont * $horizont)/(2*$spojnica*$vertic)); $alfa__ = 90 - $alfa - $alfa_; $gamma_ = (180 - $alfa__) / 2; $acko = sqrt($s * $s + $s * $s - (2 * $s * $s) * cos(deg2rad($alfa__))); $v_c = $s * sin(deg2rad($alfa__));
//$posun1 = sqrt(pow($acko,2) - pow($v_c,2)); $spojnica2 = sqrt($s*$s + $s*$s - 2*$s*$s*cos(deg2rad(180 - 2*$alfa__))); if(2 * $r + $f + ($spojnica2 / 2) > $o) { break; } else if(2 * $r + $f + $spojnica2 / 2 <= $o) { $matrix[3][$q] = $m + $spojnica2 / 2; $matrix[2][$q] = $v_c + $r; $f = $matrix[3][$q]; if(2 * $r + $f + $spojnica2 <= $o) { $matrix[1][$q] = $m + $spojnica2; $m = $matrix[1][$q]; $f = $m; } } while(!($f+$r >= $matrix[0][$n - 1] && $f+$r < $matrix[0][$n] && $n < count($matrix[0]))) { $n++; if($f+$r >= $matrix[0][$n - 1] && $f+$r < $matrix[0][$n]) { $horizont = $matrix[0][$n] - $f; } } $q++; } return $matrix[$u][$v]; }
|
|
Registrovaný: 14.01.12 Prihlásený: 20.07.13 Príspevky: 46 Témy: 9 | 9 |
+ ak tu fciu nevolam cyklicky ale len jednorazovo, napr:
echo last_space($A, $B, $x, $d, $diff, 2, 1); - tz ze tie indexy 2 a 1 vlozim priamo, tak je problem s prekrocenim execution time na zaciatku vnoreneho cyklu while(!($f+$r >= $matrix[0][$n - 1] && $f+$r < $matrix[0][$n] && $n < count($matrix[0]))) . . .
ciel je vlastne to aby som mohol pouzit udaje z matice $matrix[][] na roznych miestach v scriptoch. vdaka
|
|
Registrovaný: 14.04.09 Prihlásený: 20.09.24 Príspevky: 1188 Témy: 198 | 198 |
Tak sa ti to zrejme proste v tom cykle zacykluje. Nechal by som si vypisovat hodnoty tich premennych co riadia cyklud a podla toho sledoval preco sa to zacykluje.
_________________ CPU: Intel core i5 3470 GPU: Gigabyte N760OC-2GD MB: MSI B75A-G43 RAM: DDRAM3 8GB (2x4GB) TEAM RAM 1600MHz Elite Zdroj: Seasonic G Series 450W HDD: 500GB vybraty z notebooku Lenovo E531 i5-3230M N4IBPXS SSD:Samsung 840 Evo 250GB Case: Fractal Define R4 black pearl FAN: Cooler Master Hyper 212+ EVO DVD: SAMSUNG DVD±R/±RW/RAM SH-224DB SATA, černá, bulk OS: Ubuntu 12.04 64bit & Windows 7 Ultimate 64bit Monitor: Dell U2412m |
|
Registrovaný: 14.01.12 Prihlásený: 20.07.13 Príspevky: 46 Témy: 9 | 9 |
hmm..vazne vdaka za nazor len neviem presne ako to myslis, ak mas na mysli nejaku slepu iteraciu tak to na 99perc. vylucujem. inak ked ta procedura bola priamo v kode(nie cez fciu) tak normalne mi davala hodnoty. neviem si s tym rady, nemam skusenost s podobnym problemom. nejak ju zrejme musim prerobit jednoducho. napadlo ma ci tam nieje zle nieco co skuseny prog. hned vidi, v kode ako takom by chyba nemala byt, ocakaval som skor radu na nejaku fintu..kazdopadne dik aj tak
|
|
Registrovaný: 14.04.09 Prihlásený: 20.09.24 Príspevky: 1188 Témy: 198 | 198 |
Ja som ten kod nejak podrobne neskumal ani netestoval. Kazdopadne mozes si skusit este zvysit cas na 1 script aj volnu pamet pre script v php.ini a uvidis, ci ti to aspon poriadne prebehne.
_________________ CPU: Intel core i5 3470 GPU: Gigabyte N760OC-2GD MB: MSI B75A-G43 RAM: DDRAM3 8GB (2x4GB) TEAM RAM 1600MHz Elite Zdroj: Seasonic G Series 450W HDD: 500GB vybraty z notebooku Lenovo E531 i5-3230M N4IBPXS SSD:Samsung 840 Evo 250GB Case: Fractal Define R4 black pearl FAN: Cooler Master Hyper 212+ EVO DVD: SAMSUNG DVD±R/±RW/RAM SH-224DB SATA, černá, bulk OS: Ubuntu 12.04 64bit & Windows 7 Ultimate 64bit Monitor: Dell U2412m |
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
Bolo by vhodne, keby si zverejnil aj vstupne data, pri ktorych sa problem vyskytuje, aby sa pricina dala rychlejsie identifikovat.
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 14.01.12 Prihlásený: 20.07.13 Príspevky: 46 Témy: 9 | 9 |
ok tak vstupy, menujem zaradom podla poradia argum. ($o, $p, $r, $s, $t, $u, $v) , $o, $p su strany pravouhleho 4uholnika..cize stvorec alebo obdlznik v metroch, vykresovanie mam uz v mierke ale v samotnej funkcii nieje podstatne aspon myslim. $r je polomer kruznice, $s je priemer tej istej kruznice, cize $r == $s/2, $t je diferencia kt mi vyplinula z gonio analyzy, zpravidla je to cca 6tina az 9mina priemeru tej kruznice, $u, $v - indexy vyslednej matice na vytiahnutie hodnot. cize rozmerove data mozu byt kludne v metroch, a len dodrzat aby priemer kruznice bol mensi nez strany 4uholnika a najlepsie niekolko krat mensi napr. 3x ..tz napr. function last_space(9, 7, 1.3, 2.6, 0.4, $u, $v). ..vyznam fcie je ze mi ukaze ako ulozit predmet s kruhovou podstavou cize valec do priestoru o rozmeroch $o x $p aby bol priestor co najlepsie vyuzity, vysledky matice dalej idu do fcie imagearc(...) fcia last_space(); je uz len doplnkova alebo zaverecna fcia, je to skolsky projekt ohladom logistiky. ..a problem sa vyskztuje na riadku kde zacina ten druhy, vnutorny cyklus while() dakujem za kazdy prispevok
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
Skusil som spustit last_space(9, 7, 1.3, 2.6, 0.4, 1, 1). Podla vsetkeho tam mas nekonecny cyklus (1. while), kde sa ti hodnoty v podmienke vobec nemenia, v mojom pripade to bolo vzdy while(9 - 0 >= 1.3). Cyklus sa nedostal ani do if vetvy, kde je break, ani do elseif vetvy, kde by sa mala menit hodnota $f, ktora sa pouziva v podmienke 1. while cyklu.
Hlavny dovod je chyba pri vypocte $alfa_, kde acos vracia NAN, pretoze cislo predane ako argument je > 1
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 14.01.12 Prihlásený: 20.07.13 Príspevky: 46 Témy: 9 | 9 |
ou, vdaka, hmm..pri hodnotach co som daval mi NAN vobec netlacilo..vdaka este raz!(:
|
|
Registrovaný: 14.01.12 Prihlásený: 20.07.13 Príspevky: 46 Témy: 9 | 9 |
takze..mal si pravdu bola tam chyba, pri kopirovani proced. do fcie sa mi podarilo pozmenit zatvorky, a acos platil len po lomitko, pritom mal zahrnat cely vyraz nebolo by ma napadlo ze je tam taka mechanicka chyba.sustredil som sa na ine, lebo povodne v nefunkcionalnom tvare to islo pekne..really thanx ! (:
|
|
Stránka: 1 z 1
| [ Príspevkov: 10 ] | |
|