/* ////////////////////////////////////////////////////////////////////////////////////// * implementation */ tb_float_t tb_powf(tb_float_t x, tb_float_t y) { #ifdef TB_CONFIG_LIBM_HAVE_POWF return powf(x, y); #else return (tb_float_t)tb_pow(x, y); #endif }
/* ////////////////////////////////////////////////////////////////////////////////////// * main */ tb_int_t tb_demo_other_test_main(tb_int_t argc, tb_char_t** argv) { #if 0 // s = m/n = -lnp / (ln2 * ln2) = -log2(p) / ln2 // k = s * ln2 = -log2(p) // p = (1 - e^(-k/s))^k tb_double_t p = 0.0001; tb_double_t k = -tb_log2(p); tb_double_t s = k / (tb_log2(2) / tb_log2(2.718281828459045)); tb_double_t v = tb_pow((1 - tb_exp(-k/s)), k); tb_trace_i("p: %lf, k: %lf, s: %lf, v: %lf", p, k, s, v); // p = (1 - e^(-k/s))^k // lnp = k * ln(1 - e^(-k/s)) // (lnp) / k = ln(1 - e^(-k/s)) // e^((lnp) / k) = 1 - e^(-k/s) // e^(-k/s) = 1 - e^((lnp) / k) = 1 - (e^lnp)^(1/k) = 1 - p^(1/k) // -k/s = ln(1 - p^(1/k)) // s = -k / ln(1 - p^(1/k)) // s ~= -k / (-p^(1/k) + 0.5p^(2/k)) // // c = p^(1/k) // s = -k / ln(1 - c)) // s ~= -k / (-c-0.5c^2) = 2k / (2c + c * c) tb_double_t p2 = 0.0001; tb_double_t k2 = 5; // tb_double_t tt = 1.0 - tb_pow(p2, 1.0 / k2); // tb_double_t s2 = -k2 * tb_log2(2.718281828459045) / tb_log2(tt); // tb_double_t s2 = k2 / tb_pow(p2, 1.0 / k2); tb_double_t c2 = tb_pow(p2, 1.0 / k2); tb_double_t s2 = (k2 + k2) / (c2 + c2 + c2 * c2); tb_double_t v2 = tb_pow((1 - tb_exp(-k2/s2)), k2); tb_trace_i("p: %lf, k: %lf, s: %lf, v: %lf", p2, k2, s2, v2); #endif return 0; }