phpでルートの計算

お久しぶりです。
さて今日はですね、専門学生の頃C言語でチャレンジしていろいろあって途中で終わっていた「ルートの値を計算するプログラムを作る」という目標がある意味一段落したので、記念書き込み(何

でもまだ桁数増えると死ぬし、小数点以下も7桁目くらまでしか出してないからまだ駄目。
最終的にはぐーぐる計算機みたいな答えが出せるようにしたい。とか思ってたりしてみたり。。

ちなみにルートの値の出し方しったのは高校生の時。授業ではなかったので直接聞いてみた。
これは良い暇つぶしになる!と思ったんだけど、いつも途中でわかんなくなる;
だから計算しても3、4桁目とかまでとかだったんだろうなぁ、懐かしい。。
しかも多分、絶対どっかで間違ってた気がするw

専門入って計算する機会なくなってちょっと忘れてたんだけど、Cを覚えた時思い出したので遊びがてらやってみたけど駄目だったんだよね;
紙の上だと数字2つずつわけてとか0を2個増やして〜とか簡単なのに、プログラム上だと何かと面倒;
で、結局Cではできなかたんだけど、今また思い出したので再挑戦(笑

というわけで計算してるとこをペタリ。。



0) {
$int[] = $number % 100;
$number = $number /100;
}

//配列の数を取得
$count = count($int) - 1;
//一時計算用
$temp = 0;
$temp_int = 0;
$answer = 0;
//一番上の値
$int_limit = $int[$count];

//整数部分の計算
while ($count >= 0) {
$answer *= 10;
//一桁目を取る
$temp = squaring($int_limit, $temp_int);
//一桁目を答えに足す
$answer += $temp;
//一時変数に1桁目を代入
$temp_int += $temp;
//リミットから一時変数×一桁目の値を引いて100かけて次の値を足す
$count--;
if ($int_limit != 0) {
$int_limit -= $temp_int*$temp;
$int_limit *= 100;
//1桁目を足して10かける
$temp_int = ($temp_int+$temp) * 10;
}
if ($count >= 0) {
$int_limit += $int[$count];
}
}

$count = 1;
$temp = 0;

//計算すべき数字がまだ残っている
for ($i=0;$i < 8;$i++) {
if ($int_limit > 0) {
$count /= 10;
//1桁目を取る
$temp = squaring($int_limit, $temp_int);
$answer = $answer + ($count * $temp);
$temp_int += $temp;

if ($int_limit != 0) {
$int_limit -= $temp_int*$temp;
$int_limit *= 100;
//1桁目を足して10かける
$temp_int = ($temp_int+$temp) * 10;
}
}
}

return $answer;
}

//1桁の整数を求める
function squaring($limit, $int) {
if ($limit == 0) {
return $int %= 10;
}
$count = 0;
//9までいったら強制的に抜ける
while (($int+$count)*$count <= $limit && $count < 10) {
$count++;
}
//1桁目だけ返す
$count--;
return $count;
}

//リミット値と計算値の取得
function get_int($int_limit, $temp_int, $temp) {

}
?>

一応こんな感じ。いまのところ。。
無理矢理感がひしひしと伝わってくるけどw
変数名とコメントが優しくないのは仕様・・。

前のぐちゃぐちゃしてたのよりはだいぶよくなったと思います。
考え方も昔より全然スマートになったような・・(気がするだけかも;
前はなんか根本からミスってたような気がするし;

詰まったとこは、

  • 代入のタイミング
  • 整数から小数点の計算にうつるところ
  • squaring()の中で9までしか1桁目まわさないとこ

といったとこか・・

とりあえず、1桁目の値出す計算式、最初1〜9までの中で絶対あるもんだと思ってたら違ったんですね。
10までいってもリミット値超えないことってあるんですね。
専門時代はそこまで気付いてなかった。
てことはそこまで計算してないってことだよねw頭でw
だめじゃんw

というわけで、今後も隙をみていじくっていきたいと思っています。


ダイヤモンドゲームはいつとりかかれるのかなぁ;