Beispiel #1
0
/* return t such that e(t) > sqrt(N), set *faet = odd prime divisors of e(t) */
static ulong
compute_t(GEN N, GEN *e, GEN *faet)
{
  /* 2^e b <= N < 2^e (b+1), where b >= 2^52. Approximating log_2 N by
   * log2(gtodouble(N)) ~ e+log2(b), the error is less than log(1+1/b) < 1e-15*/
  double C = dbllog2(N) + 1e-6; /* > log_2 N */
  ulong t;
  GEN B;
  /* Return "smallest" t such that f(t) >= C, which implies e(t) > sqrt(N) */
  /* For N < 2^3515 ~ 10^1058 */
  if (C < 3514.6)
  {
    t = compute_t_small(C);
    *e = compute_e(t, faet);
    return t;
  }
  B = sqrti(N);
  for (t = 8648640+840;; t+=840)
  {
    pari_sp av = avma;
    *e = compute_e(t, faet);
    if (cmpii(*e, B) > 0) break;
    avma = av;
  }
  return t;
}
Beispiel #2
0
/*
 * Счётные задачи в бесконечном цикле вычисляют некоторое значение и
 * сравнивают его с эталоном. Подсчитывается количество циклов и
 * количество ошибок.
 */
void test_fpu1 (void *arg)
{
    task_fpu_control (task_current, FCSR_ROUND_N, FCSR_ROUND | FCSR_ENABLES);
    for (;;) {
        /* Вычисляем E - основание натурального логарифма. */
        e = compute_e (1);
        count_e_loops++;
        if (e != 0x2.b7e151628aed2p0)
            count_e_errors++;
    }
}