/ Hex Artifact Content
Login

Artifact f190d0cc5182529acb15babd177781be1ac1718c:


0000: 2f 2a 0a 2a 2a 20 32 30 31 33 2d 30 34 2d 31 37  /*.** 2013-04-17
0010: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 75 74 68 6f  .**.** The autho
0020: 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79  r disclaims copy
0030: 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f  right to this so
0040: 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70  urce code.  In p
0050: 6c 61 63 65 20 6f 66 0a 2a 2a 20 61 20 6c 65 67  lace of.** a leg
0060: 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20  al notice, here 
0070: 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 2a  is a blessing:.*
0080: 2a 0a 2a 2a 20 20 20 20 4d 61 79 20 79 6f 75 20  *.**    May you 
0090: 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20  do good and not 
00a0: 65 76 69 6c 2e 0a 2a 2a 20 20 20 20 4d 61 79 20  evil..**    May 
00b0: 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69 76 65  you find forgive
00c0: 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73 65 6c  ness for yoursel
00d0: 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20 6f 74  f and forgive ot
00e0: 68 65 72 73 2e 0a 2a 2a 20 20 20 20 4d 61 79 20  hers..**    May 
00f0: 79 6f 75 20 73 68 61 72 65 20 66 72 65 65 6c 79  you share freely
0100: 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67 20 6d  , never taking m
0110: 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67 69 76  ore than you giv
0120: 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  e..**.**********
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ****.**.** This 
0180: 53 51 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e  SQLite extension
0190: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 66 75 6e 63   implements func
01a0: 74 69 6f 6e 73 20 66 6f 72 20 74 68 65 20 65 78  tions for the ex
01b0: 61 63 74 20 64 69 73 70 6c 61 79 0a 2a 2a 20 61  act display.** a
01c0: 6e 64 20 69 6e 70 75 74 20 6f 66 20 49 45 45 45  nd input of IEEE
01d0: 37 35 34 20 42 69 6e 61 72 79 36 34 20 66 6c 6f  754 Binary64 flo
01e0: 61 74 69 6e 67 2d 70 6f 69 6e 74 20 6e 75 6d 62  ating-point numb
01f0: 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 69 65 65  ers..**.**   iee
0200: 65 37 35 34 28 58 29 0a 2a 2a 20 20 20 69 65 65  e754(X).**   iee
0210: 65 37 35 34 28 59 2c 5a 29 0a 2a 2a 0a 2a 2a 20  e754(Y,Z).**.** 
0220: 49 6e 20 74 68 65 20 66 69 72 73 74 20 66 6f 72  In the first for
0230: 6d 2c 20 74 68 65 20 76 61 6c 75 65 20 58 20 73  m, the value X s
0240: 68 6f 75 6c 64 20 62 65 20 61 20 66 6c 6f 61 74  hould be a float
0250: 69 6e 67 2d 70 6f 69 6e 74 20 6e 75 6d 62 65 72  ing-point number
0260: 2e 0a 2a 2a 20 54 68 65 20 66 75 6e 63 74 69 6f  ..** The functio
0270: 6e 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 61 20  n will return a 
0280: 73 74 72 69 6e 67 20 6f 66 20 74 68 65 20 66 6f  string of the fo
0290: 72 6d 20 27 69 65 65 65 37 35 34 28 59 2c 5a 29  rm 'ieee754(Y,Z)
02a0: 27 20 77 68 65 72 65 0a 2a 2a 20 59 20 61 6e 64  ' where.** Y and
02b0: 20 5a 20 61 72 65 20 69 6e 74 65 67 65 72 73 20   Z are integers 
02c0: 73 75 63 68 20 74 68 61 74 20 58 3d 3d 59 2a 70  such that X==Y*p
02d0: 6f 77 28 32 2c 5a 29 2e 0a 2a 2a 0a 2a 2a 20 49  ow(2,Z)..**.** I
02e0: 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 66 6f 72  n the second for
02f0: 6d 2c 20 59 20 61 6e 64 20 5a 20 61 72 65 20 69  m, Y and Z are i
0300: 6e 74 65 67 65 72 73 20 77 68 69 63 68 20 61 72  ntegers which ar
0310: 65 20 74 68 65 20 6d 61 6e 74 69 73 73 61 20 61  e the mantissa a
0320: 6e 64 0a 2a 2a 20 62 61 73 65 2d 32 20 65 78 70  nd.** base-2 exp
0330: 6f 6e 65 6e 74 20 6f 66 20 61 20 6e 65 77 20 66  onent of a new f
0340: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75  loating point nu
0350: 6d 62 65 72 2e 20 20 54 68 65 20 66 75 6e 63 74  mber.  The funct
0360: 69 6f 6e 20 72 65 74 75 72 6e 73 0a 2a 2a 20 61  ion returns.** a
0370: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20   floating-point 
0380: 76 61 6c 75 65 20 65 71 75 61 6c 20 74 6f 20 59  value equal to Y
0390: 2a 70 6f 77 28 32 2c 5a 29 2e 0a 2a 2a 0a 2a 2a  *pow(2,Z)..**.**
03a0: 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a   Examples:.**.**
03b0: 20 20 20 20 20 69 65 65 65 37 35 34 28 32 2e 30       ieee754(2.0
03c0: 29 20 20 20 20 20 20 20 2d 3e 20 20 20 20 20 27  )       ->     '
03d0: 69 65 65 65 37 35 34 28 32 2c 30 29 27 0a 2a 2a  ieee754(2,0)'.**
03e0: 20 20 20 20 20 69 65 65 65 37 35 34 28 34 35 2e       ieee754(45.
03f0: 32 35 29 20 20 20 20 20 2d 3e 20 20 20 20 20 27  25)     ->     '
0400: 69 65 65 65 37 35 34 28 31 38 31 2c 2d 32 29 27  ieee754(181,-2)'
0410: 0a 2a 2a 20 20 20 20 20 69 65 65 65 37 35 34 28  .**     ieee754(
0420: 32 2c 20 30 29 20 20 20 20 20 20 2d 3e 20 20 20  2, 0)      ->   
0430: 20 20 32 2e 30 0a 2a 2a 20 20 20 20 20 69 65 65    2.0.**     iee
0440: 65 37 35 34 28 31 38 31 2c 20 2d 32 29 20 20 20  e754(181, -2)   
0450: 2d 3e 20 20 20 20 20 34 35 2e 32 35 0a 2a 2f 0a  ->     45.25.*/.
0460: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
0470: 33 65 78 74 2e 68 22 0a 53 51 4c 49 54 45 5f 45  3ext.h".SQLITE_E
0480: 58 54 45 4e 53 49 4f 4e 5f 49 4e 49 54 31 0a 23  XTENSION_INIT1.#
0490: 69 6e 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e  include <assert.
04a0: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 72  h>.#include <str
04b0: 69 6e 67 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49 6d  ing.h>../*.** Im
04c0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
04d0: 74 68 65 20 69 65 65 65 37 35 34 28 29 20 66 75  the ieee754() fu
04e0: 6e 63 74 69 6f 6e 0a 2a 2f 0a 73 74 61 74 69 63  nction.*/.static
04f0: 20 76 6f 69 64 20 69 65 65 65 37 35 34 66 75 6e   void ieee754fun
0500: 63 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  c(.  sqlite3_con
0510: 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c 0a 20  text *context,. 
0520: 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 73 71 6c   int argc,.  sql
0530: 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67  ite3_value **arg
0540: 76 0a 29 7b 0a 20 20 69 66 28 20 61 72 67 63 3d  v.){.  if( argc=
0550: 3d 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =1 ){.    sqlite
0560: 33 5f 69 6e 74 36 34 20 6d 2c 20 61 3b 0a 20 20  3_int64 m, a;.  
0570: 20 20 64 6f 75 62 6c 65 20 72 3b 0a 20 20 20 20    double r;.    
0580: 69 6e 74 20 65 3b 0a 20 20 20 20 69 6e 74 20 69  int e;.    int i
0590: 73 4e 65 67 3b 0a 20 20 20 20 63 68 61 72 20 7a  sNeg;.    char z
05a0: 52 65 73 75 6c 74 5b 31 30 30 5d 3b 0a 20 20 20  Result[100];.   
05b0: 20 61 73 73 65 72 74 28 20 73 69 7a 65 6f 66 28   assert( sizeof(
05c0: 6d 29 3d 3d 73 69 7a 65 6f 66 28 72 29 20 29 3b  m)==sizeof(r) );
05d0: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
05e0: 5f 76 61 6c 75 65 5f 74 79 70 65 28 61 72 67 76  _value_type(argv
05f0: 5b 30 5d 29 21 3d 53 51 4c 49 54 45 5f 46 4c 4f  [0])!=SQLITE_FLO
0600: 41 54 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 20  AT ) return;.   
0610: 20 72 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c   r = sqlite3_val
0620: 75 65 5f 64 6f 75 62 6c 65 28 61 72 67 76 5b 30  ue_double(argv[0
0630: 5d 29 3b 0a 20 20 20 20 69 66 28 20 72 3c 30 2e  ]);.    if( r<0.
0640: 30 20 29 7b 0a 20 20 20 20 20 20 69 73 4e 65 67  0 ){.      isNeg
0650: 20 3d 20 31 3b 0a 20 20 20 20 20 20 72 20 3d 20   = 1;.      r = 
0660: 2d 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  -r;.    }else{. 
0670: 20 20 20 20 20 69 73 4e 65 67 20 3d 20 30 3b 0a       isNeg = 0;.
0680: 20 20 20 20 7d 0a 20 20 20 20 6d 65 6d 63 70 79      }.    memcpy
0690: 28 26 61 2c 26 72 2c 73 69 7a 65 6f 66 28 61 29  (&a,&r,sizeof(a)
06a0: 29 3b 0a 20 20 20 20 69 66 28 20 61 3d 3d 30 20  );.    if( a==0 
06b0: 29 7b 0a 20 20 20 20 20 20 65 20 3d 20 30 3b 0a  ){.      e = 0;.
06c0: 20 20 20 20 20 20 6d 20 3d 20 30 3b 0a 20 20 20        m = 0;.   
06d0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 65 20   }else{.      e 
06e0: 3d 20 61 3e 3e 35 32 3b 0a 20 20 20 20 20 20 6d  = a>>52;.      m
06f0: 20 3d 20 61 20 26 20 28 28 28 28 73 71 6c 69 74   = a & ((((sqlit
0700: 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35 32 29  e3_int64)1)<<52)
0710: 2d 31 29 3b 0a 20 20 20 20 20 20 6d 20 7c 3d 20  -1);.      m |= 
0720: 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29  ((sqlite3_int64)
0730: 31 29 3c 3c 35 32 3b 0a 20 20 20 20 20 20 77 68  1)<<52;.      wh
0740: 69 6c 65 28 20 65 3c 31 30 37 35 20 26 26 20 6d  ile( e<1075 && m
0750: 3e 30 20 26 26 20 28 6d 26 31 29 3d 3d 30 20 29  >0 && (m&1)==0 )
0760: 7b 0a 20 20 20 20 20 20 20 20 6d 20 3e 3e 3d 20  {.        m >>= 
0770: 31 3b 0a 20 20 20 20 20 20 20 20 65 2b 2b 3b 0a  1;.        e++;.
0780: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
0790: 28 20 69 73 4e 65 67 20 29 20 6d 20 3d 20 2d 6d  ( isNeg ) m = -m
07a0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
07b0: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a  te3_snprintf(siz
07c0: 65 6f 66 28 7a 52 65 73 75 6c 74 29 2c 20 7a 52  eof(zResult), zR
07d0: 65 73 75 6c 74 2c 20 22 69 65 65 65 37 35 34 28  esult, "ieee754(
07e0: 25 6c 6c 64 2c 25 64 29 22 2c 0a 20 20 20 20 20  %lld,%d)",.     
07f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0800: 6d 2c 20 65 2d 31 30 37 35 29 3b 0a 20 20 20 20  m, e-1075);.    
0810: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74  sqlite3_result_t
0820: 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 7a 52 65  ext(context, zRe
0830: 73 75 6c 74 2c 20 2d 31 2c 20 53 51 4c 49 54 45  sult, -1, SQLITE
0840: 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 7d  _TRANSIENT);.  }
0850: 65 6c 73 65 20 69 66 28 20 61 72 67 63 3d 3d 32  else if( argc==2
0860: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   ){.    sqlite3_
0870: 69 6e 74 36 34 20 6d 2c 20 65 2c 20 61 3b 0a 20  int64 m, e, a;. 
0880: 20 20 20 64 6f 75 62 6c 65 20 72 3b 0a 20 20 20     double r;.   
0890: 20 69 6e 74 20 69 73 4e 65 67 20 3d 20 30 3b 0a   int isNeg = 0;.
08a0: 20 20 20 20 6d 20 3d 20 73 71 6c 69 74 65 33 5f      m = sqlite3_
08b0: 76 61 6c 75 65 5f 69 6e 74 36 34 28 61 72 67 76  value_int64(argv
08c0: 5b 30 5d 29 3b 0a 20 20 20 20 65 20 3d 20 73 71  [0]);.    e = sq
08d0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36  lite3_value_int6
08e0: 34 28 61 72 67 76 5b 31 5d 29 3b 0a 20 20 20 20  4(argv[1]);.    
08f0: 69 66 28 20 6d 3c 30 20 29 7b 0a 20 20 20 20 20  if( m<0 ){.     
0900: 20 69 73 4e 65 67 20 3d 20 31 3b 0a 20 20 20 20   isNeg = 1;.    
0910: 20 20 6d 20 3d 20 2d 6d 3b 0a 20 20 20 20 20 20    m = -m;.      
0920: 69 66 28 20 6d 3c 30 20 29 20 72 65 74 75 72 6e  if( m<0 ) return
0930: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
0940: 6d 3d 3d 30 20 26 26 20 65 3e 31 30 30 30 20 26  m==0 && e>1000 &
0950: 26 20 65 3c 31 30 30 30 20 29 7b 0a 20 20 20 20  & e<1000 ){.    
0960: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
0970: 5f 64 6f 75 62 6c 65 28 63 6f 6e 74 65 78 74 2c  _double(context,
0980: 20 30 2e 30 29 3b 0a 20 20 20 20 20 20 72 65 74   0.0);.      ret
0990: 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 77  urn;.    }.    w
09a0: 68 69 6c 65 28 20 28 6d 3e 3e 33 32 29 26 30 78  hile( (m>>32)&0x
09b0: 66 66 65 30 30 30 30 30 20 29 7b 0a 20 20 20 20  ffe00000 ){.    
09c0: 20 20 6d 20 3e 3e 3d 20 31 3b 0a 20 20 20 20 20    m >>= 1;.     
09d0: 20 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20   e++;.    }.    
09e0: 77 68 69 6c 65 28 20 6d 21 3d 30 20 26 26 20 28  while( m!=0 && (
09f0: 28 6d 3e 3e 33 32 29 26 30 78 66 66 66 30 30 30  (m>>32)&0xfff000
0a00: 30 30 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  00)==0 ){.      
0a10: 6d 20 3c 3c 3d 20 31 3b 0a 20 20 20 20 20 20 65  m <<= 1;.      e
0a20: 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65 20  --;.    }.    e 
0a30: 2b 3d 20 31 30 37 35 3b 0a 20 20 20 20 69 66 28  += 1075;.    if(
0a40: 20 65 3c 30 20 29 20 65 20 3d 20 6d 20 3d 20 30   e<0 ) e = m = 0
0a50: 3b 0a 20 20 20 20 69 66 28 20 65 3e 30 78 37 66  ;.    if( e>0x7f
0a60: 66 20 29 20 65 20 3d 20 30 78 37 66 66 3b 0a 20  f ) e = 0x7ff;. 
0a70: 20 20 20 61 20 3d 20 6d 20 26 20 28 28 28 28 73     a = m & ((((s
0a80: 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 31 29 3c  qlite3_int64)1)<
0a90: 3c 35 32 29 2d 31 29 3b 0a 20 20 20 20 61 20 7c  <52)-1);.    a |
0aa0: 3d 20 65 3c 3c 35 32 3b 0a 20 20 20 20 69 66 28  = e<<52;.    if(
0ab0: 20 69 73 4e 65 67 20 29 20 61 20 7c 3d 20 28 28   isNeg ) a |= ((
0ac0: 73 71 6c 69 74 65 33 5f 75 69 6e 74 36 34 29 31  sqlite3_uint64)1
0ad0: 29 3c 3c 36 33 3b 0a 20 20 20 20 6d 65 6d 63 70  )<<63;.    memcp
0ae0: 79 28 26 72 2c 20 26 61 2c 20 73 69 7a 65 6f 66  y(&r, &a, sizeof
0af0: 28 72 29 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  (r));.    sqlite
0b00: 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28  3_result_double(
0b10: 63 6f 6e 74 65 78 74 2c 20 72 29 3b 0a 20 20 7d  context, r);.  }
0b20: 0a 7d 0a 0a 0a 23 69 66 64 65 66 20 5f 57 49 4e  .}...#ifdef _WIN
0b30: 33 32 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c  32.__declspec(dl
0b40: 6c 65 78 70 6f 72 74 29 0a 23 65 6e 64 69 66 0a  lexport).#endif.
0b50: 69 6e 74 20 73 71 6c 69 74 65 33 5f 69 65 65 65  int sqlite3_ieee
0b60: 5f 69 6e 69 74 28 0a 20 20 73 71 6c 69 74 65 33  _init(.  sqlite3
0b70: 20 2a 64 62 2c 20 0a 20 20 63 68 61 72 20 2a 2a   *db, .  char **
0b80: 70 7a 45 72 72 4d 73 67 2c 20 0a 20 20 63 6f 6e  pzErrMsg, .  con
0b90: 73 74 20 73 71 6c 69 74 65 33 5f 61 70 69 5f 72  st sqlite3_api_r
0ba0: 6f 75 74 69 6e 65 73 20 2a 70 41 70 69 0a 29 7b  outines *pApi.){
0bb0: 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49  .  int rc = SQLI
0bc0: 54 45 5f 4f 4b 3b 0a 20 20 53 51 4c 49 54 45 5f  TE_OK;.  SQLITE_
0bd0: 45 58 54 45 4e 53 49 4f 4e 5f 49 4e 49 54 32 28  EXTENSION_INIT2(
0be0: 70 41 70 69 29 3b 0a 20 20 28 76 6f 69 64 29 70  pApi);.  (void)p
0bf0: 7a 45 72 72 4d 73 67 3b 20 20 2f 2a 20 55 6e 75  zErrMsg;  /* Unu
0c00: 73 65 64 20 70 61 72 61 6d 65 74 65 72 20 2a 2f  sed parameter */
0c10: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
0c20: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
0c30: 64 62 2c 20 22 69 65 65 65 37 35 34 22 2c 20 31  db, "ieee754", 1
0c40: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30  , SQLITE_UTF8, 0
0c50: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
0c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c70: 20 69 65 65 65 37 35 34 66 75 6e 63 2c 20 30 2c   ieee754func, 0,
0c80: 20 30 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53   0);.  if( rc==S
0c90: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
0ca0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65  rc = sqlite3_cre
0cb0: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c  ate_function(db,
0cc0: 20 22 69 65 65 65 37 35 34 22 2c 20 32 2c 20 53   "ieee754", 2, S
0cd0: 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 0a 20  QLITE_UTF8, 0,. 
0ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d00: 69 65 65 65 37 35 34 66 75 6e 63 2c 20 30 2c 20  ieee754func, 0, 
0d10: 30 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  0);.  }.  return
0d20: 20 72 63 3b 0a 7d 0a                              rc;.}.