0

私が製品を持っている場合:

float d = ( a * b * c );

そして、それはいくつかの最大サイズ (私の例では e) を超えています。どうすれば a、b、c の項を縮小して収まるようにできますか?

if ( d > e )
{
    // reduce a, b and c by some fixed percentage, such that ( a * b * c ) == e
}

それはおそらく本当に簡単ですが、私はそれを理解することはできません!

4

2 に答える 2

3

全体の比率の立方根でそれぞれをスケーリングします。

fac = exp(log(e/d)/3)
a *= fac
b *= fac
c *= fac
于 2013-08-09T11:06:02.983 に答える
2
#include <math.h>
…
double scale = cbrt(e / d);
float new_a = a * scale;
float new_b = b * scale;
float new_c = c * scale;

new_a * new_b * new_c上記で計算されたように、正確に ではない場合があることに注意してくださいe。少し上かもしれません。積を絶対に より下にしたい場合は、次eのような安全率を取りますscale = cbrt(0.5 * e / d);

于 2013-08-09T11:06:12.553 に答える