Perlにおける int(・・・); って?
[上に]
[前に]
[次に]
うなぎイヌ
1999/08/04(水) 11:58:40
いろいろな方のプログラムを見てると、
$a =int(---計算処理---);
という式が出てきます。int(); はどんなことに使うのでしょう?
絶対 int(); を使わないといけないものとはどんなことでしょうか?
教えてください
ふじ
1999/08/04(水) 12:23:52
http://www.tohoho-web.com/wwwperl2.htm#Math
つーか、Perlの本持ってないなら(で、ソースを読む気があるなら)
買いましょう。いちいち関数を人に聞いてたら効率悪いですよ。
うなぎイヌ
1999/08/04(水) 15:12:18
つーか、私自身いろいろ調べたのですが納得がいく説明がなかったのでお聞きしたまでです。
うなぎイヌ
1999/08/04(水) 15:49:11
ごめんなさい、教えてもらうほうのくせにちょっと出過ぎました。
はんせい。
Tmb
1999/08/04(水) 16:13:27
perlのことは判らないのですが。一般的な考え方として。
この手の関数は,要は数値の小数部をどうにか(切り捨て/切り上げ)して整数化するときに
使うものですよね。言語によって四捨五入する関数とか,整数部を返す関数とか,その数値を
越えない整数を返す(注:整数部を返すのと似てるけど,負数の場合が異なる)関数とか,
いろいろありますけど。
もちろん数学的な意味合いで整数部を得る場合にも重要ですが,プログラミングの際も,
例えば配列の引数などのように,本来,小数になるべきでない数値があるわけで,そう
いったときには整数にするべきです。
また言語仕様にもよりますが,数値型の変数に整数型,単精度,倍精度などの違いがある
場合は,整数型の変数に対して小数が代入されるような事態というのは「正しくない」こと
なので(とはいえ,何事もなかったように整数化される場合が多いので省略する人もいますが)
こういったケースでも整数化する関数を使うべきです。
Tmb
1999/08/04(水) 16:30:34
自己フォロー
>こういったケースでも整数化する関数を使うべきです。
と言い切ってしまうのはまずかったですね。
「本来なら」あるいは「型の一致を厳密にする立場から言えば」と付け加えさせて
いただきます m(_ _)m
ふじ
1999/08/04(水) 19:13:33
>納得がいく説明がなかったので
青ラクダ本から引用。
----
int EXPR
EXPRの整数部分を返す。EXPRを省略すると$_が処理の対象になる。
Perlの除算は浮動小数点で実行される。しかしあなたがCプログラマなら、
除算した結果に int を適用するのを忘れることがあるだろう。
$average_age = 939/16; # 58.6875になる(Cなら58になる)
$average_age = int 939/16 # 58になる
----
どこが「納得いかない」のか分かりませんので、これ以上は何とも・・・
>絶対 int(); を使わないといけないもの
整数部分が欲しい時。
Tmbさんの言うように、配列の添字に使うとか。
#しかしまあ、Perlだと
#$a[4.4] = 1;
#なんてのも
#$a[4] = 1;
#と解釈してくれちゃったりしますが(^^;
うなぎイヌ
1999/08/05(木) 13:52:30
[[解決]]
・・・なるほど。ちゃんとわかりました。
ありがとうございました。
Tmb
1999/08/05(木) 14:30:14
解決したところでちょっとした補足というか
#蛇足というか
昔のBASICなんかでは今に比べると処理速度も遅かったし,マシンの扱う
メモリも今に比べると遥かに少なかったのですが,そうなるとデータ量が
少なくて済む整数型の方が,その倍,4倍を使用する単精度実数,倍精度
実数に比べると,メモリの節約にもなるし演算速度もあがるので,整数で
やれることは極力,整数だけでやる,という気風があったように思います。
だから他人の組んだプログラムを見ても,数値変数のすべてが整数として
宣言されていても,別に違和感を感じませんでした。むしろ整数として
使われてない変数の方が気になるくらいで。
今は無駄の多いプログラムを組んでも,マシンにパワーがあるのでそれでも
ごり押しできてしまいますから,こういった本当に細かい部分での節約と
いう考えはすでに時代遅れなのかもしれませんが,でもまぁどうせなら
出来るだけ無駄を省いたプログラムの方が,見ていて気持がいいですよね。
#その一方で,無駄を省くことだけを考えて,注釈文すらつけないような
#「見にくい」プログラムというのも困りもんですけど。
[上に]
[前に]
[次に]