Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Firefox/docshell/test/unit/   (Office von Apache Version 25.8.3.2©)  Datei vom 10.2.2025 mit Größe 676 B image not shown  

Quelle  e_acosh.cpp   Sprache: unbekannt

 

/* @(#)e_acosh.c 1.3 95/01/18 */
/*
 * ====================================================
 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
 *
 * Developed at SunSoft, a Sun Microsystems, Inc. business.
 * Permission to use, copy, modify, and distribute this
 * software is freely granted, provided that this notice 
 * is preserved.
 * ====================================================
 *
 */


//#include <sys/cdefs.h>
//__FBSDID("$FreeBSD$");

/* __ieee754_acosh(x)
 * Method :
 * Based on 
 * acosh(x) = log [ x + sqrt(x*x-1) ]
 * we have
 * acosh(x) := log(x)+ln2, if x is large; else
 * acosh(x) := log(2x-1/(sqrt(x*x-1)+x)) if x>2; else
 * acosh(x) := log1p(t+sqrt(2.0*t+t*t)); where t=x-1.
 *
 * Special cases:
 * acosh(x) is NaN with signal if x<1.
 * acosh(NaN) is NaN without signal.
 */


#include <cmath>
#include <float.h>

#include "math_private.h"

static const double
one = 1.0,
ln2 = 6.93147180559945286227e-01;  /* 0x3FE62E42, 0xFEFA39EF */

double
__ieee754_acosh(double x)
{
 double t;
 int32_t hx;
 u_int32_t lx;
 EXTRACT_WORDS(hx,lx,x);
 if(hx<0x3ff00000) {  /* x < 1 */
     return (x-x)/(x-x);
 } else if(hx >=0x41b00000) { /* x > 2**28 */
     if(hx >=0x7ff00000) { /* x is inf of NaN */
         return x+x;
     } else 
  return __ieee754_log(x)+ln2; /* acosh(huge)=log(2x) */
 } else if(((hx-0x3ff00000)|lx)==0) {
     return 0.0;   /* acosh(1) = 0 */
 } else if (hx > 0x40000000) { /* 2**28 > x > 2 */
     t=x*x;
     return __ieee754_log(2.0*x-one/(x+std::sqrt(t-one)));
 } else {   /* 1<x<2 */
     t = x-one;
     return log1p(t+std::sqrt(2.0*t+t*t));
 }
}

97%


[ Dauer der Verarbeitung: 0.9 Sekunden  (vorverarbeitet)  ]