CGI-BBS > CGI > Perl > ルートを使いたい!


カレッヂ
カレッヂ


質問者 ニッキー  投稿日 1/28(日) 15:06:58
perlのリファレンスを見たんですができません。
$a=sqrt(4);
だと、$aは当然2になりますが、

$z=$b*$b-4*$a*$c;
$x=sqrt($z);

このように指定するとエラーが出ます。
もちろん、$a$b$cは入力してあり、
$zも普通に演算します。
また、
$z=4;
とすれば、$xにはちゃんと$zのルートが記入されます。
どなたか、理由を教えて下さい。
回答者 さくら  [削除]  投稿日 1/29(月) 02:15:52
このコードは、正しいコードです。
例えば、
$a = 4;
$b = 10;
$c = 4;
このように代入すると、$z の値は36になります。
ルート36は、6です。
$x の値は 6 になります。

但し、$z の値が 負の数になる場合は計算できない。
対数は、正の実数に対してのみ定義されているので、
下記のようなメッセージを吐き出す。

Can't take sqrt of ***
意味は *** のルートは計算できないと言っている。

これは、致命的エラーを引き起こすので、プログラムは、ここで終了する。
もし、これを、使いたければ eval でトラップする事です。

このような解答を望んでいなければ、失礼しました。


回答者  [削除]  投稿日 1/29(月) 11:25:16
$z=$b*$b-4*$a*$c;
if($z >= 0){
    $x=sqrt($z);
}
else{
    #負の数だったときの処理
}

こんな感じの数値チェックが必要になると思います。
質問者 ニッキー  [削除]  投稿日 1/31(水) 18:54:25
さくらさん、解説ありがとうございます。
羊さん、回避するスクリプトありがとうございます。
今回は式を見ればわかると思いますが、二次方程式を作ってみたく、
いろいろとやっていました。
またご迷惑かけることがあると思いますが、
その節もよろしくお願いします。

ご迷惑おかけいたしました。

このページは終了したので返信(回答)は書きこめません

Web裏技