Perl › モジュール › here Perlの数値の有効桁数は15〜16桁くらいで、普通の演算ではこれ以上大きな数の演算を行うことができません。大きな桁の数値を扱いたい場合はMath::BigIntやMath::BigFloatを使用します。 大きな整数の演算 大きな整数の演算を行うにはMath::BigIntモジュールで生成したオブジェクトを用いて計算を行います。 use Math::BigInt; my $big_int = Math::BigInt->new("11111111111111111111111111111111111111111111"); $big_int = $big_int * 2; 小数点以下の桁数が大きい数の演算 Math::BigFloatモジュールで生成したオブジェクトを用いて計算を行います。 use Math::BigFloat; my $big_f
Perl › 関数 › here srand関数を使用すると再現性のある乱数を生成することができます。rand関数を呼び出す前に適当な数値をsrand関数に与えます。 # 乱数発生アルゴリズムを初期化 srand $seed; rand $num; コンピュータにおける乱数の生成とは コンピュータは演算によって乱数を発生させます。ということはこれは乱数ではありません。コンピュータは人間がさいころを投げるようには、ランダムな分布を発生させることはできません。 コンピュータができることは、「なるべく均等な分布を発生させるアルゴリズム」を使って数値列を作ることだけです。このアルゴリズムは初期値の違いによって分布を変えます。これを擬似乱数といいます。 初期値の違いによって分布を変えるということは、言い換えれば初期値が同じであれば分布を変えないということです。 rand関数が毎回異なる乱数列を発生さ
Perl › 関数 › here 乱数を生成するにはrand関数を使用します。引数で指定した数より小さい0以上の数値がランダムで生成されます。 $ret = rand 10; 乱数とはランダムな数のことです。アプリケーションを作成するときは、時にランダムな数がほしいときがあります。ゲームでさいころを投げたりクイズを出したりするときに使われます。またデータを暗号化するときの鍵の作成などにも使われたりします。 rand関数に、たとえば「10」を指定すれば、「2.34...」「5.36...」「9.45...」など、0以上で、10より小さい数が、生成されます。 サンプル rand関数で生成した乱数を利用するサンプルです。 use strict; use warnings; print "(1)乱数を発生させる。( 10以下の整数 )\n"; for my $i (1 .. 10) { # ran
Perl › 進数変換 Perlで「進数変換」を行う方法を解説します。 10進数から2進数、8進数、16進数への変換 10進数から2進数、8進数、16進数に変換してみましょう。sprintf関数でフォーマット指定を使います。 # 2進文字列に変換 my $bit_str = sprintf("%b", $num); # 8進文字列に変換 my $oct_str = sprintf("%o", $num); # 16進文字列に変換 my $hex_str = sprintf("%X", $num); 10進文字列を2進数に変換するには、sprintf関数でフォーマット指定で "%b"とします。8進数、16進数に変換するにはそれぞれ、"%o","%X"とします。 sprintf関数はprintf関数によくにた関数です。sprintfを使えば、printf関数で出力される文字列が戻り値として取得
Perl › 関数 › here exp関数を使用すると、自然対数の底 ネイピア数eを取得することができます。 # e my $exp = exp(1); # eの3乗 my $exp3 = exp(3); ネイピア数eを取得するにはexp関数に1を渡します。引数は、べき乗の指定になっているので、nを指定すればeをn乗した数を取得できます。 サンプル use strict; use warnings; print "(1)ネイピア数e\n"; print "e = " . exp(1) . "\n\n"; print "(2)ネイピア数eのn乗\n"; print "eの3乗 =" . exp(3) . "\n"; Perl › 関数 › here
Perl › モジュール › here 三角関数関連の関数は標準関数としては、cos関数とsin関数しかありませんが、標準モジュールにMath::Trigという三角関数関連のモジュールがあります。簡単に内容を紹介します。 三角関数の逆数 逆数とは、分母と分子を入れ替えた数のことです。逆関数とは意味がことなるので注意しましょう。sin,cos,tanの逆数をそれぞれ、cosec( コセカント ), sec( セカント ), cot( コタンジェント )と呼びます。 Math::Trigモジュールで、cosec関数、sec関数、cot関数を使用することができます。 意味 cosec 1/sin sec 1/cos cot 1/tan 三角関数の逆関数 逆関数とは、y = f( x ) という関係が成り立つときに、x = g( y ) を満たすような g のことです。y = f( x ) は、x
Perl › 数値 › here 度数法( 30°,90°など )で表された角度を、ラジアン( π/6, π/4 など )に変換するにはMath::Trigモジュールのdeg2rad関数を使用します。その逆を行うには、rad2deg関数を使用します。 use Math::Trig 'pi', 'deg2rad'; # 度数法の角度を弧度法の角度に変換する my $rad = deg2rad(30); # 弧度法の角度を度数法の角度に変換する my $deg = rad2deg(pi / 6); 三角関数については以下のページで詳しく解説しています。 三角関数を利用する 度数法と弧度法 度数法とは、円を360分割したものを単位として使う角度の表現方法のことです。普段よく見る角度の表現 30°,90°などは度数法で表現した角度です。 一方弧度法とは、半径がr円周がrになる扇型の中心角を単位とし
Perl › 数値 › here 円周率を取得するにはMath::Trigモジュールのpi関数を使用します。 use Math::Trig 'pi'; pi; 円周率とは、円周(L)と直径(R)比率( L/R )のことです。円周率は無理数であり有限範囲の小数で表現することができません。piで取得する円周率は、近似値になります。 三角関数のことを英語でtrigonometric functionといい、Math::TrigのTrigはこの頭文字です。円周率は三角関数で角度を指定するときに利用されます。 三角関数については以下のページで詳しく解説しています。 三角関数を利用する サンプル 円周率を取得するサンプルです。 use strict; use warnings; use Math::Trig 'pi'; print "(1)円周率を取得する。\n"; print pi . "\n";
Perl › 関数 › here sqrt関数を使用すると正の平方根を求めることができます。平方根とは、2乗すると元の数になる数のことを言い、正と負の値があります。( 例: 4の平方根は、2と-2 ) 負の平方根がほしいときは、sqrtの結果の符合を変えるだけです。 my $root_num = sqrt $num; サンプル sqrt関数を使って、正の平方根を求めるサンプルです。 use strict; use warnings; # 正の平方根を求める my $num = 16; my $root_num = sqrt $num; Perlにおける数値計算についてももっと知りたい場合は、以下の記事を参考にしてください。 Perlにおける数値の扱い Perl › 関数 › here
Perl › 関数 › here ceil関数を使用すると、小数点を切り上げることができます。 use POSIX 'ceil'; $ret = ceil $num; サンプル ceil関数を使ったサンプルです。 use strict; use warnings; use POSIX 'ceil'; my $num1 = 1.5; my $num2 = -1.5; print "(1)小数点を切り上げる。\n"; my $num1_ceil = ceil $num1; my $num2_ceil = ceil $num2; print "$num1の切り上げ : $num1_ceil\n"; print "$num2の切り上げ : $num2_ceil\n\n"; Perl › 関数 › here
Perl › 関数 › here int関数を使用すると、小数点を含む数値の整数部を取り出すことができます。 $ret = int $num; 整数部というのは、小数から小数点以下の部分を取り除いた部分のことです。切り下げや切り上げとは異なります。たとえば「1.5」という小数の場合は、整数部は「1」です。また「-2.5」という小数の場合は、整数部は「-2」です。 整数を渡した場合は、整数がそのまま返ってきます。 サンプル int関数を使用して、整数部を取り出すサンプルです。 use strict; use warnings; my $num1 = 1.5; my $num2 = -1.5; print "(1)整数部を取り出す。\n"; my $num1_int = int $num1; my $num2_int = int $num2; print "$num1の整数部 : $num1_
Perl › 数値 › here 四捨五入を行うには、sprintf関数を使用します。フォーマット指定を、有効桁を指定して四捨五入したい場合は"%.3g"や"%.5g"のように指定し、小数点以下のある桁で四捨五入したい場合は"%.3f"や"%.5f"のように指定します。 # 小数点以下の桁数で指定。 sprintf("%.1f", $num1); # 有効桁数で指定。 sprintf("%.1g", $num1); 四捨五入を行うには、sprintf関数を使用します。"%.1f"という書式指定は、浮動小数点を小数点第1までに丸めるという書式指定です。小数点第2位が四捨五入されます。 有効桁数を指定して四捨五入を行いたい場合は、"%.1g"のように指定します。たとえば37.48を、"%.3g"で書式指定をすると、37.5という数値が得られます。 四捨五入の注意点 my $num2 = 0.7
Perl › 数値 › 浮動小数点の比較 コンピュータは内部的には2進数を使って演算しているので、2進数で表現できない小数については計算の過程で誤差が生まれます。2進数の演算の過程で発生した誤差の影響を無視するためには、ある有効桁で数値を丸めて比較する必要があります。 桁を丸めるにはsprintf関数を使用します。 sprintf("%.5g", $num1); "%.5g" は浮動小数点を有効桁5桁に丸めるという書式指定です。 サンプルプログラム 浮動小数点を比較するサンプルです。 use strict; use warnings; my $num1 = 1; my $num2; # 0.1を10回加算 for my $i (1 .. 10){ $num2 += 0.1; } print "(1)誤差が生まれる。\n"; if ($num1 != $num2) { print '$num
Perl › 数値 › 誤差 小数をコンピュータで表現するには誤差が問題になります。2進数で表現できない小数は誤差が発生します。 コンピュータは数値を内部的には2進数としてしか表現できません。整数についてはどんな数でも2進数として表現できます。 問題になるのは小数です。2進数で表現できる少数は、0.5, 0.25, 0.125, 0.0625 ( 順に、1/2, 1/4, 1/8, 1/16 ) などの1/2のn乗で表現される数と、これらの和で表現される数( たとえば 0.75 )だけです。 0.3 というのはいくら2を乗算しても整数になりませんから、2進数で正確に表現することができません。コンピュータはこのような数を近似することによって何とか扱います。0.3は、2進数を使って以下のように近似されます。 0.3 = 1/4 + 1/32 + 1/64 + 1/512 = 0.25 + 0
Perl › 数値 › here 文字列が整数を表現しているかを判定するには、正規表現を利用します。正規表現で最初から終わりまで数字でできているかどうかを判定します。 /^[0-9]+$/ 整数であるかどうかを判定するには上記の正規表現に、先頭に+か-が指定されてもかまわないということを付け加えるだけです。 /^[+-]?[0-9]+$/ サンプル 変数が数値かどうかを判定するサンプルです。 use strict; use warnings; print "1: 文字列が正しい数値を表現しているかを判定する\n"; my $num1 = "345"; # 文字列が数字のみであるかどうかの判定 # 「先頭から数字がひとつ以上続いて末尾にいたる」と読む if ($num1 =~ /^[0-9]+$/) { print "$num1は数字のみの文字列です。\n"; } # 整数であるかどうかの判
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く