php
1 2$sho = 1; 3$zyusinsu[0] = 15;//10進数の15 4$henkanSitai_nsinsu = 8;//15を8進数にするときに利用する 5 6 for($i=0;$sho!==0;$i++) { 7 8 //まず10進数の$zyusinsu[0]を、変換したいn進数($henkanSitai_nsinsu)で割る。割った数値は、商を意味する$shoに代入。小数点がある場合は、正規表現で小数点以下を削除。小数点以下を削除した値も$shoに代入。 9 //希望のn進数の数値を求めるには、余が必要なので余も計算しておく。余は、その数値の下一桁目から求めることになっている。一つずつ求める処理なので、それぞれの値は、$henkango_nsinsuに代入される。 10 11 12 13 //導き出したいn進数の商を求める。 14 //なら、なぜ商($sho)も求めるのかというと、この"再度別のn進数に変換する"という計算式の終わりの印に必要だからである。この場合の印は、$shoが「0」になることだ。 15 $sho = $zyusinsu[0] / $henkanSitai_nsinsu; 16 17 //fatalerror allowed memory size of...bytes exhaustedがでたのでメモリを増やしてみたところ、今度は画面が真っ白に。 18 ini_set("memory_limit","150MB"); 19 //$shoに小数点以下の数字があればそれを削除する。小数点を削除した数値をさらに$henkanSitai_nsinsuで割っていく。 20 $syosutenSakuzyo = "/^(\d+)(\.\d+)*/";// 21 //$shoに小数点があれば、小数点以下を削除。削除後の$shoの型はstringである。 22 $sho = preg_replace($syosutenSakuzyo,"$1",$sho);//この行でエラーが出ている模様。 23 24 25 //下一桁目から変換したいn進数を求める。一桁ずつ配列に保存していく。 26 //例 $zyusinsu[0](15)、$henkanSitai_nsinsuが8進数にしたいので8である。15/8は、1...7なので$henkango_nsinsu[]配列には7が入る。 27 //※「$henkango_nsinsu[] = $sho % $henkanSitai_nsinsu;」とすると、下二桁目から求めることになってしまうので(1/8=0...8)、"最初に計算を行うときのみ"割られる値は、$zyusinsu[0]だ。 28 // 二回目以降の計算で、$zyusinsu[0]から$shoに変更しなくてはならない。 29 30 if($i === 0) { 31 $henkango_nsinsu[] = $zyusinsu[0] % $henkanSitai_nsinsu; 32 } else { 33 $henkango_nsinsu[] = $sho % $henkanSitai_nsinsu; 34 } 35 }
$zyusinsu[0]
には、10進数の値が代入されており、$henkanSitai_nsinsu
には、4進数であったり8進数などの進数を意味する値が入っており、この値で$zyusinsu[0]
を割ることで$henkanSitai_nsinsu
で指定したn進数に($henkanSitai_nsinsu
が2なら4進数に、8なら8進数に)変換する、という処理ですが、実行すると
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 36 bytes) in C:\xampp\htdocs\Decimal\lib\test.php on line 39
この39行目は、$sho = preg_replace($syosutenSakuzyo,"$1",$sho);
にあたります。なので、ini_set("memory_limit","150MB");
で容量を増やしてみたのですが、今度は真っ白な画面が表示されるようになりました。
150MBにしたのは、134MBでは足りない、というエラー文言を目にしたからです。因みにphpinfo()
してmemory_limitを調べるとmemory_limit 128M 128M でした。
なぜ、容量が足らなくなったのでしょうか。どうすると正常に処理されるのでしょうか。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/14 10:33 編集
退会済みユーザー
2017/04/17 01:45
2017/04/18 10:39
退会済みユーザー
2017/04/18 10:43