構成 | マクロ定義 | 型定義 | 関数 | 変数

src/third_party/dtoa/dtoa.c

#include "stdlib.h"
#include "string.h"
#include "errno.h"
#include "float.h"
#include "math.h"

ソースコードを見る。

構成

union  U
struct  Bigint

マクロ定義

#define Long   long
#define MALLOC   malloc
#define PRIVATE_MEM   2304
#define PRIVATE_mem   ((PRIVATE_MEM+sizeof(double)-1)/sizeof(double))
#define CONST   const
#define word0(x)   ((U*)&x)->L[0]
#define word1(x)   ((U*)&x)->L[1]
#define dval(x)   ((U*)&x)->d
#define Storeinc(a, b, c)
#define Exp_shift   20
#define Exp_shift1   20
#define Exp_msk1   0x100000
#define Exp_msk11   0x100000
#define Exp_mask   0x7ff00000
#define P   53
#define Bias   1023
#define Emin   (-1022)
#define Exp_1   0x3ff00000
#define Exp_11   0x3ff00000
#define Ebits   11
#define Frac_mask   0xfffff
#define Frac_mask1   0xfffff
#define Ten_pmax   22
#define Bletch   0x10
#define Bndry_mask   0xfffff
#define Bndry_mask1   0xfffff
#define LSB   1
#define Sign_bit   0x80000000
#define Log2P   1
#define Tiny0   0
#define Tiny1   1
#define Quick_max   14
#define Int_max   14
#define Avoid_Underflow
#define Flt_Rounds   1
#define Rounding   Flt_Rounds
#define rounded_product(a, b)   a *= b
#define rounded_quotient(a, b)   a /= b
#define Big0   (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1))
#define Big1   0xffffffff
#define Pack_32
#define FFFFFFFF   0xffffffffUL
#define Llong   long long
#define ULLong   unsigned Llong
#define ACQUIRE_DTOA_LOCK(n)
#define FREE_DTOA_LOCK(n)
#define Kmax   15
#define Bcopy(x, y)
#define d0   word0(d)
#define d1   word1(d)
#define d0   word0(d)
#define d1   word1(d)
#define Scale_Bit   0x10
#define n_bigtens   5

型定義

typedef unsigned Long ULong
typedef struct Bigint Bigint

関数

static BigintBalloc (int k)
static void Bfree (Bigint *v)
static Bigintmultadd (Bigint *b, int m, int a)
static Bigints2b (CONST char *s, int nd0, int nd, ULong y9)
static int hi0bits (register ULong x)
static int lo0bits (ULong *y)
static Biginti2b (int i)
static Bigintmult (Bigint *a, Bigint *b)
static Bigintpow5mult (Bigint *b, int k)
static Bigintlshift (Bigint *b, int k)
static int cmp (Bigint *a, Bigint *b)
static Bigintdiff (Bigint *a, Bigint *b)
static double ulp (double x)
static double b2d (Bigint *a, int *e)
static Bigintd2b (double d, int *e, int *bits)
static double ratio (Bigint *a, Bigint *b)
double strtod (CONST char *s00, char **se)
static int quorem (Bigint *b, Bigint *S)
static char * rv_alloc (int i)
static char * nrv_alloc (const char *s, char **rve, int n)
void freedtoa (char *s)
char * dtoa (double d, int mode, int ndigits, int *decpt, int *sign, char **rve)

変数

static double private_mem [PRIVATE_mem]
static double * pmem_next = private_mem
Exactly one of IEEE_8087
Exactly one of IEEE_MC68k
Exactly one of VAX
static Bigintfreelist [Kmax+1]
static Bigintp5s
static CONST double tens []
static CONST double bigtens [] = { 1e16, 1e32, 1e64, 1e128, 1e256 }
static CONST double tinytens []
static char * dtoa_result

マクロ定義

#define ACQUIRE_DTOA_LOCK (   n  ) 

dtoa.c466 行で定義されています。

参照元 Balloc(), Bfree(), と pow5mult().

#define Avoid_Underflow

dtoa.c333 行で定義されています。

参照元 strtod().

#define Bcopy (   x,
  y 
)
値:
memcpy((char *)&x->sign, (char *)&y->sign, \
y->wds*sizeof(Long) + 2*sizeof(int))

dtoa.c545 行で定義されています。

参照元 dtoa(), multadd(), と strtod().

#define Bias   1023

dtoa.c314 行で定義されています。

参照元 d2b(), dtoa(), と strtod().

#define Big0   (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1))

dtoa.c433 行で定義されています。

参照元 strtod().

#define Big1   0xffffffff

dtoa.c434 行で定義されています。

参照元 strtod().

#define Bletch   0x10

dtoa.c322 行で定義されています。

参照元 dtoa().

#define Bndry_mask   0xfffff

dtoa.c323 行で定義されています。

参照元 dtoa(), と strtod().

#define Bndry_mask1   0xfffff

dtoa.c324 行で定義されています。

参照元 strtod().

#define CONST   const
#define d0   word0(d)
#define d0   word0(d)
#define d1   word1(d)
#define d1   word1(d)
#define dval (   x  )     ((U*)&x)->d

dtoa.c286 行で定義されています。

参照元 b2d(), dtoa(), ratio(), strtod(), と ulp().

#define Ebits   11

dtoa.c318 行で定義されています。

参照元 b2d().

#define Emin   (-1022)

dtoa.c315 行で定義されています。

参照元 strtod().

#define Exp_1   0x3ff00000

dtoa.c316 行で定義されています。

参照元 b2d(), dtoa(), と strtod().

#define Exp_11   0x3ff00000

dtoa.c317 行で定義されています。

#define Exp_mask   0x7ff00000

dtoa.c312 行で定義されています。

参照元 dtoa(), と strtod().

#define Exp_msk1   0x100000

dtoa.c310 行で定義されています。

参照元 d2b(), dtoa(), ratio(), strtod(), と ulp().

#define Exp_msk11   0x100000

dtoa.c311 行で定義されています。

#define Exp_shift   20

dtoa.c308 行で定義されています。

参照元 d2b(), と strtod().

#define Exp_shift1   20

dtoa.c309 行で定義されています。

参照元 dtoa().

#define FFFFFFFF   0xffffffffUL

dtoa.c443 行で定義されています。

#define Flt_Rounds   1

dtoa.c343 行で定義されています。

参照元 dtoa(), と strtod().

#define Frac_mask   0xfffff

dtoa.c319 行で定義されています。

参照元 dtoa(), と strtod().

#define Frac_mask1   0xfffff

dtoa.c320 行で定義されています。

#define FREE_DTOA_LOCK (   n  ) 

dtoa.c467 行で定義されています。

参照元 Balloc(), Bfree(), と pow5mult().

#define Int_max   14

dtoa.c331 行で定義されています。

参照元 dtoa().

#define Kmax   15

dtoa.c470 行で定義されています。

#define Llong   long long

dtoa.c458 行で定義されています。

#define Log2P   1

dtoa.c327 行で定義されています。

参照元 dtoa(), と strtod().

#define Long   long

dtoa.c167 行で定義されています。

参照元 dtoa(), s2b(), strtod(), と ulp().

#define LSB   1

dtoa.c325 行で定義されています。

参照元 strtod().

#define MALLOC   malloc

dtoa.c192 行で定義されています。

参照元 Balloc().

#define n_bigtens   5

dtoa.c1418 行で定義されています。

参照元 dtoa(), と strtod().

#define P   53

dtoa.c313 行で定義されています。

参照元 d2b(), dtoa(), strtod(), と ulp().

#define Pack_32

dtoa.c437 行で定義されています。

#define PRIVATE_mem   ((PRIVATE_MEM+sizeof(double)-1)/sizeof(double))

dtoa.c199 行で定義されています。

参照元 Balloc().

#define PRIVATE_MEM   2304

dtoa.c197 行で定義されています。

#define Quick_max   14

dtoa.c330 行で定義されています。

参照元 dtoa().

#define rounded_product (   a,
  b 
)    a *= b

dtoa.c429 行で定義されています。

参照元 strtod().

#define rounded_quotient (   a,
  b 
)    a /= b

dtoa.c430 行で定義されています。

参照元 strtod().

#define Rounding   Flt_Rounds

dtoa.c352 行で定義されています。

参照元 dtoa(), と strtod().

#define Scale_Bit   0x10

dtoa.c1417 行で定義されています。

参照元 strtod().

#define Sign_bit   0x80000000

dtoa.c326 行で定義されています。

参照元 dtoa().

#define Storeinc (   a,
  b,
  c 
)
値:
(((unsigned short *)a)[0] = (unsigned short)b, \
((unsigned short *)a)[1] = (unsigned short)c, a++)

dtoa.c297 行で定義されています。

参照元 diff(), mult(), と quorem().

#define Ten_pmax   22

dtoa.c321 行で定義されています。

参照元 dtoa(), と strtod().

#define Tiny0   0

dtoa.c328 行で定義されています。

参照元 strtod().

#define Tiny1   1

dtoa.c329 行で定義されています。

参照元 strtod().

#define ULLong   unsigned Llong

dtoa.c461 行で定義されています。

参照元 diff(), mult(), multadd(), と quorem().

#define word0 (   x  )     ((U*)&x)->L[0]

dtoa.c283 行で定義されています。

参照元 b2d(), d2b(), dtoa(), ratio(), strtod(), と ulp().

#define word1 (   x  )     ((U*)&x)->L[1]

dtoa.c284 行で定義されています。

参照元 b2d(), d2b(), dtoa(), strtod(), と ulp().


型定義

typedef struct Bigint Bigint

dtoa.c485 行で定義されています。

typedef unsigned Long ULong

dtoa.c170 行で定義されています。


関数

static double b2d ( Bigint a,
int *  e 
) [static]

dtoa.c1145 行で定義されています。

参照先 dval, Ebits, Exp_1, hi0bits(), Bigint::wds, word0, word1, と Bigint::x.

参照元 ratio().

static Bigint* Balloc ( int  k  )  [static]
static void Bfree ( Bigint v  )  [static]

dtoa.c534 行で定義されています。

参照先 ACQUIRE_DTOA_LOCK, と FREE_DTOA_LOCK.

参照元 dtoa(), freedtoa(), lshift(), multadd(), pow5mult(), と strtod().

static int cmp ( Bigint a,
Bigint b 
) [static]

dtoa.c975 行で定義されています。

参照先 Bigint::wds, と Bigint::x.

参照元 v8::internal::FloatingPointHelper::AllocateHeapNumber(), v8::internal::FloatingPointHelper::CheckFloatOperands(), v8::internal::CodeGenerator::Comparison(), v8::internal::CallStubCompiler::CompileCallConstant(), v8::internal::CallStubCompiler::CompileCallField(), v8::internal::StoreStubCompiler::CompileStoreCallback(), v8::internal::StoreStubCompiler::CompileStoreField(), v8::internal::StoreStubCompiler::CompileStoreInterceptor(), diff(), dtoa(), v8::internal::CodeGenerator::EnterJSFrame(), v8::internal::CodeGenerator::GenCode(), v8::internal::CallIC::Generate(), v8::internal::InstanceofStub::Generate(), v8::internal::CompareStub::Generate(), v8::internal::ToBooleanStub::Generate(), v8::internal::SmiComparisonDeferred::Generate(), v8::internal::CallFunctionStub::Generate(), v8::internal::UnarySubStub::Generate(), v8::internal::StackCheckStub::Generate(), v8::internal::GenericBinaryOpStub::Generate(), v8::internal::SetPropertyStub::Generate(), v8::internal::GetPropertyStub::Generate(), v8::internal::LoadIC::GenerateArrayLength(), v8::internal::CEntryStub::GenerateCore(), v8::internal::GenerateDictionaryLoad(), v8::internal::CodeGenerator::GenerateFastCaseSwitchJumpTable(), v8::internal::CodeGenerator::GenerateIsArray(), v8::internal::CallIC::GenerateMegamorphic(), v8::internal::ArgumentsAccessStub::GenerateNewObject(), v8::internal::LoadIC::GenerateNormal(), v8::internal::CallIC::GenerateNormal(), v8::internal::GenerateNormalHelper(), v8::internal::CodeGenerator::GenerateObjectEquals(), v8::internal::ArgumentsAccessStub::GenerateReadElement(), v8::internal::ArgumentsAccessStub::GenerateReadLength(), v8::internal::CodeGenerator::GenerateSetValueOf(), v8::internal::GenericBinaryOpStub::GenerateSmiCode(), v8::internal::GenerateStringCheck(), v8::internal::LoadIC::GenerateStringLength(), v8::internal::CEntryStub::GenerateThrowOutOfMemory(), v8::internal::CEntryStub::GenerateThrowTOS(), v8::internal::CodeGenerator::GenerateValueOf(), v8::internal::CodeGenerator::LoadFromSlot(), v8::internal::Parser::ParseBinaryExpression(), v8::internal::ProbeTable(), quorem(), v8::internal::CodeGenerator::SmiComparison(), v8::internal::List< T, P >::Sort(), strtod(), と v8::internal::CodeGenerator::ToBoolean().

static Bigint* d2b ( double  d,
int *  e,
int *  bits 
) [static]

dtoa.c1215 行で定義されています。

参照先 Balloc(), Bias, Exp_msk1, Exp_shift, hi0bits(), lo0bits(), P, Bigint::wds, word0, word1, と Bigint::x.

参照元 dtoa(), と strtod().

static Bigint* diff ( Bigint a,
Bigint b 
) [static]
char* dtoa ( double  d,
int  mode,
int  ndigits,
int *  decpt,
int *  sign,
char **  rve 
)
void freedtoa ( char *  s  ) 

dtoa.c2582 行で定義されています。

参照先 Bfree(), Bigint::k, と Bigint::maxwds.

参照元 dtoa().

static int hi0bits ( register ULong  x  )  [static]

dtoa.c648 行で定義されています。

参照先 Bigint::k, と Bigint::x.

参照元 b2d(), d2b(), と dtoa().

static Bigint* i2b ( int  i  )  [static]

dtoa.c730 行で定義されています。

参照先 Balloc(), Bigint::wds, と Bigint::x.

参照元 dtoa(), pow5mult(), と strtod().

static int lo0bits ( ULong y  )  [static]

dtoa.c682 行で定義されています。

参照先 Bigint::k, と Bigint::x.

参照元 d2b().

static Bigint* lshift ( Bigint b,
int  k 
) [static]

dtoa.c915 行で定義されています。

参照先 Balloc(), Bfree(), Bigint::k, Bigint::maxwds, Bigint::wds, と Bigint::x.

参照元 dtoa(), と strtod().

static Bigint* mult ( Bigint a,
Bigint b 
) [static]

dtoa.c746 行で定義されています。

参照先 Balloc(), Bigint::k, Bigint::maxwds, Storeinc, ULLong, Bigint::wds, と Bigint::x.

参照元 dtoa(), pow5mult(), と strtod().

static Bigint* multadd ( Bigint b,
int  m,
int  a 
) [static]

dtoa.c553 行で定義されています。

参照先 Balloc(), Bcopy, Bfree(), Bigint::k, Bigint::maxwds, ULLong, Bigint::wds, と Bigint::x.

参照元 dtoa(), pow5mult(), と s2b().

static char* nrv_alloc ( const char *  s,
char **  rve,
int  n 
) [static]

dtoa.c2560 行で定義されています。

参照先 rv_alloc().

参照元 dtoa().

static Bigint* pow5mult ( Bigint b,
int  k 
) [static]

dtoa.c858 行で定義されています。

参照先 ACQUIRE_DTOA_LOCK, Bfree(), FREE_DTOA_LOCK, i2b(), mult(), multadd(), と Bigint::next.

参照元 dtoa(), と strtod().

static int quorem ( Bigint b,
Bigint S 
) [static]

dtoa.c2416 行で定義されています。

参照先 cmp(), v8::internal::S, Storeinc, ULLong, Bigint::wds, と Bigint::x.

参照元 dtoa().

static double ratio ( Bigint a,
Bigint b 
) [static]

dtoa.c1358 行で定義されています。

参照先 b2d(), dval, Exp_msk1, Bigint::wds, と word0.

参照元 strtod().

static char* rv_alloc ( int  i  )  [static]

dtoa.c2537 行で定義されています。

参照先 Balloc().

参照元 dtoa(), と nrv_alloc().

static Bigint* s2b ( CONST char *  s,
int  nd0,
int  nd,
ULong  y9 
) [static]

dtoa.c610 行で定義されています。

参照先 Balloc(), Bigint::k, Long, multadd(), Bigint::wds, と Bigint::x.

参照元 strtod().

double strtod ( CONST char *  s00,
char **  se 
)
static double ulp ( double  x  )  [static]

dtoa.c1103 行で定義されています。

参照先 dval, Exp_msk1, Long, P, word0, word1, と Bigint::x.

参照元 strtod().


変数

CONST double bigtens[] = { 1e16, 1e32, 1e64, 1e128, 1e256 } [static]

dtoa.c1406 行で定義されています。

参照元 dtoa(), と strtod().

char* dtoa_result [static]

dtoa.c2530 行で定義されています。

Bigint* freelist[Kmax+1] [static]

dtoa.c487 行で定義されています。

Exactly one of IEEE_8087

dtoa.c264 行で定義されています。

Exactly one of IEEE_MC68k

dtoa.c264 行で定義されています。

Bigint* p5s [static]

dtoa.c851 行で定義されています。

double * pmem_next = private_mem [static]

dtoa.c200 行で定義されています。

参照元 Balloc().

double private_mem[PRIVATE_mem] [static]

dtoa.c200 行で定義されています。

参照元 Balloc().

CONST double tens[] [static]
初期値:
 {
                1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9,
                1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19,
                1e20, 1e21, 1e22



                }

dtoa.c1395 行で定義されています。

参照元 dtoa(), と strtod().

CONST double tinytens[] [static]
初期値:
 { 1e-16, 1e-32, 1e-64, 1e-128,

                9007199254740992.*9007199254740992.e-256
                



                }

dtoa.c1407 行で定義されています。

Exactly one of VAX

dtoa.c264 行で定義されています。

 全て クラス ネームスペース ファイル 関数 変数 型定義 列挙型 列挙型の値 フレンド マクロ定義