< :前の番号
^ :番号順リスト
> :次の番号
P :前の記事(自分と同じ返事先を持つ)
N :次の記事
|<:スレッドの先頭
>|:次のスレッド
^ :返事先
_:自分への返事
>:同じ返事先を持つ記事(前)
<:同じ返事先を持つ記事(後)
---:分割してスレッド表示、再表示
| :分割して(縦)スレッド表示、再表示
~ :スレッドのフレーム消去
.:インデックス
..:インデックスのインデックス
こんにちは、あくつといいます。
#素人発言です。 (^^ )>>
a,b は正の整数
a - b は、a < b ならば、負の整数
a,b は整数( b != 0 )
a / b は、a % b != 0 ならば、有理数
b は整数
b ** a は、a が有理数ならば、実数
Ruby は 1-3 で負の整数を生成する。
Ruby は 1/3 で有理数を生成しない。
Ruby は 3**(1/2) で実数を生成しない。# 3**(0) だから 1
Ruby は、整数を整数の中に閉じ込めるから当然。
AWK と比較。
$ cat n.awk
BEGIN{
for( i=1; i<=10; i++ ){
printf("%d / %d = %f\n", i, 10, i / 10);
}
printf("%d**(%d/%d) = %f\n", 3, 1, 2, 3**(1/2));
exit(0);
}
$ cat n.rb
BEGIN{
1.upto(10){ |i|
printf("%d / %d = %f\n", i, 10, i / 10)
}
printf("%d**(%d/%d) = %f\n", 3, 1, 2, 3**(1/2))
exit(0)
}
$ gawk -f n.awk
1 / 10 = 0.100000
2 / 10 = 0.200000
3 / 10 = 0.300000
4 / 10 = 0.400000
5 / 10 = 0.500000
6 / 10 = 0.600000
7 / 10 = 0.700000
8 / 10 = 0.800000
9 / 10 = 0.900000
10 / 10 = 1.000000
3**(1/2) = 1.732051
$ ruby n.rb
1 / 10 = 0.000000
2 / 10 = 0.000000
3 / 10 = 0.000000
4 / 10 = 0.000000
5 / 10 = 0.000000
6 / 10 = 0.000000
7 / 10 = 0.000000
8 / 10 = 0.000000
9 / 10 = 0.000000
10 / 10 = 1.000000
3**(1/2) = 1.000000
$
AWK ユーザーからすると、この結果は不気味です。
int / int を再定義すれば AWK と同じにできますが。
$ cat real.rb
require 'rational'
class Fixnum
alias _old_division /
def / (obj)
if obj.kind_of?(Integer) && (self % obj)!= 0
Rational(self, obj)
else
self._old_division obj
end
end
end
class Bignum
alias _old_division /
def / (obj)
if obj.kind_of?(Integer) && (self % obj)!= 0
Rational(self, obj)
else
self._old_division obj
end
end
end
$ ruby -rreal.rb n.rb
1 / 10 = 0.100000
2 / 10 = 0.200000
3 / 10 = 0.300000
4 / 10 = 0.400000
5 / 10 = 0.500000
6 / 10 = 0.600000
7 / 10 = 0.700000
8 / 10 = 0.800000
9 / 10 = 0.900000
10 / 10 = 1.000000
3**(1/2) = 1.732051
$
今からこれを標準とするのは難しいかなと思います。
でも、「AWK と同じですよ」というのは言いやすいですね。