浮動小数点数を比率または分数に変換したいと思います。
Pythonと同様に浮動小数点を1.778
比率に変換する16:9
か、bashに変換するオプションはありますか?16/9
噴水モジュール(Fraction(1.778).limit_denominator(100)
)。
ベストアンサー1
awk -v prec=0.001 -v max=2000 '
function fract(n, k, kr, d){
for(k=n;k<max;k+=n){
kr=int(k+.5); d=kr-k; if(d<0)d=-d;
if(d<prec){return kr"/"k/n}
}
return n" ??"
}
BEGIN{for(i=1;i<ARGC;i++)print fract(ARGV[i])}
' 3.1415926535 1.77777777 0.333333 2.71828 1.61803398
355/113
16/9
1/3
1264/465
987/610
繰り返し加算の代わりに乗算するとより正確になりますが、これが遅くなる可能性があります。
awk -v prec=0.00005 -v max=20000 '
function fract(n, k, kr, kf, d){
for(k=1;k<max;k++){
kf=n*k; kr=int(kf+.5); d=kr-kf; if(d<0)d=-d;
if(d<prec){return kr"/"k}
}
return n" ??"
}
BEGIN{for(i=1;i<ARGC;i++)print fract(ARGV[i])}
' 3.14159265358979323846 1.7777777 0.33333333 2.7182818 1.61803398
355/113
16/9
1/3
34109/12548
24476/15127
(max
「調整可能」は実際にはmax_numerator / orig_num
2番目のバージョンにあります)。