0

私は以前学校でこれを持っていたと確信していますが、私はこれが何と呼ばれているのか思い出せません。

私は任意の数を持っており、元の数からx未満が残るまで、0.9(または他の値0-1)を何回掛けることができるかを知る必要があります。

ループ形式では、次のようになります。

num = 4654;
mult = 0.9;
limit = 140;
count = 0;
while(num >= limit){
    num *= mult;
    count++;
}

しかし、これはループなしで実行することさえ可能ですか?対数のあるもの?

4

2 に答える 2

6

ご了承ください

num * (0.9)^k <= limit

は、ある整数に対して満たしたい不等式kであり、そのような最小のものを求めますk。それで

(0.9)^k <= limit / num

k * log(0.9) <= log(limit / num)

となることによって

k >= log(limit / num) / log(0.9)

ここで、不等式は次の理由で逆転しlog(0.9) < 0ます。kしたがって、。より大きい最小の整数を取りlog(limit / num) / log(0.9)ます。

だから、の天井を取るlog(limit / num) / log(0.9)

もちろん、これは、からの乗数がどこにあるかで置き換える0.9ことによって一般化されます。rr(0, 1)

于 2011-03-09T20:47:40.243 に答える
1

count = log(limit / num)/ log(mult)

于 2011-03-09T20:47:05.820 に答える