mirror of
https://github.com/tursodatabase/libsql.git
synced 2024-11-23 13:16:16 +00:00
165 lines
4.5 KiB
C
165 lines
4.5 KiB
C
/*
|
|
** Performance testing of floating-point binary-to-decimal conversion for
|
|
** SQLite versus the standard library.
|
|
**
|
|
** To compile:
|
|
**
|
|
** make sqlite3.c
|
|
** gcc -Os -c sqlite3.c
|
|
** gcc -I. -Os test/fp-speed-1.c sqlite3.o -ldl -lm -lpthread
|
|
**
|
|
** To run the test:
|
|
**
|
|
** time ./a.out 0 10000000 <-- standard library
|
|
** time ./a.out 1 10000000 <-- SQLite
|
|
** time ./a.out 2 10000000 <-- SQLite with long-double disabled
|
|
*/
|
|
static double aVal[] = {
|
|
-1.0163830486285643089e+063,
|
|
+0.0049243807391586981e-019,
|
|
+7.3818732407343994867e-095,
|
|
+7.0678595219225717143e+000,
|
|
+9.2807266319850025655e+120,
|
|
+5.8871050861933394663e+135,
|
|
-2.2998023621259662805e-168,
|
|
-1.5903581924910847482e+181,
|
|
+2.4313441816844978216e-001,
|
|
-3.8290987328945399091e-147,
|
|
+1.8787914062744001349e-009,
|
|
+0.7270653560487146653e-014,
|
|
+0.0639577697913183665e+107,
|
|
+5.2292338879315861930e-103,
|
|
+6.3747682672872231319e-021,
|
|
+8.6972339538329106984e-129,
|
|
-9.5074486051597691937e-026,
|
|
-8.6480257845368753018e-005,
|
|
-3.5657595775797470332e+017,
|
|
-7.8323106179731761351e+161,
|
|
+7.7813875274120800372e+077,
|
|
-1.8739718928360196596e-050,
|
|
+8.6898145915593357218e-051,
|
|
+6.0566766359877837871e+002,
|
|
+4.1703379217148160678e+199,
|
|
+2.1283871288746651560e+150,
|
|
-6.8395236083891810637e+128,
|
|
-6.2114299763939529155e-147,
|
|
-2.0753525742614637350e-149,
|
|
+5.8727459803944290257e-007,
|
|
+8.5888991062002101817e+010,
|
|
+6.8624461031355917632e+026,
|
|
-3.3053986756670905167e-075,
|
|
-4.3596843152763444945e-108,
|
|
+0.0834139520104099673e+098,
|
|
-8.8581986548904222440e-192,
|
|
-3.6622095428727698202e+038,
|
|
-6.6965852297025063260e+005,
|
|
+1.8204169347406488441e-054,
|
|
+6.5234508038649000384e-065,
|
|
+1.5923006018219011453e+083,
|
|
+1.7362555291656389480e+018,
|
|
+7.2875431976854785882e+160,
|
|
+1.2835880105958926748e-146,
|
|
+8.0516253320320819420e-113,
|
|
+6.6324633399381145440e-030,
|
|
-1.7126500070280062058e-149,
|
|
+1.6995738341583712335e+042,
|
|
+7.6048766923738663725e-112,
|
|
+0.6159117235449455043e-004,
|
|
+5.7544894355415943289e-135,
|
|
+8.2970228592690581890e-023,
|
|
-6.5531925360163067447e+020,
|
|
+5.8321334606187030050e+120,
|
|
+5.6557166509571891727e+095,
|
|
+0.3322789708438408704e-114,
|
|
-7.1210648776698686623e-050,
|
|
-9.6721262526706343301e+179,
|
|
-3.4583916571377395084e-106,
|
|
+4.7896094323214750793e-172,
|
|
-9.6926028040004137875e-056,
|
|
+7.0683848275381385483e-198,
|
|
-5.2970114182162961964e-007,
|
|
-4.4287021200905393271e-170,
|
|
+0.0728891155732808799e-189,
|
|
-9.1855462025879447465e+175,
|
|
+3.7294126234131007796e+015,
|
|
+2.6857421882792719241e+003,
|
|
-4.7070607333624685339e+039,
|
|
+7.2175820768279334274e+136,
|
|
-8.3678412534261163481e-115,
|
|
+2.2174844304241822163e+019,
|
|
+0.1949824588606861016e+112,
|
|
-9.7334052955672071912e+151,
|
|
-9.7793887766936999879e-142,
|
|
-5.1561164587416931561e+139,
|
|
-7.5048993577765174789e-022,
|
|
+7.3556076568687784568e+107,
|
|
-5.0681628575533599865e-144,
|
|
+1.5209705642027747811e+165,
|
|
-7.5989782535048296040e-101,
|
|
+1.3654137203389775871e-016,
|
|
-1.6441720554651372066e+087,
|
|
-4.9042433196141125923e+000,
|
|
-7.7063611961649130777e+118,
|
|
+0.1699427460930766201e+174,
|
|
+8.3374317849572216870e-145,
|
|
-5.2355330480469580072e+081,
|
|
-3.8510045942194147919e+141,
|
|
-6.3513622544326339887e-147,
|
|
+2.3869303484454428988e+049,
|
|
+3.8352715871620360268e-165,
|
|
-3.1263120493136887902e+035,
|
|
-5.5794797002556490823e+051,
|
|
-8.8109874479595604379e+142,
|
|
-4.3727360120203216922e+070,
|
|
-3.1109951189668539974e+170,
|
|
-9.4841878031704268232e+011,
|
|
-3.7398451668304407277e+067,
|
|
+4.8984042008915959963e-091,
|
|
};
|
|
#define NN (sizeof(aVal)/sizeof(aVal[0]))
|
|
|
|
#include "sqlite3.h"
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
int main(int argc, char **argv){
|
|
int i;
|
|
int cnt;
|
|
int fg;
|
|
char zBuf[1000];
|
|
|
|
if( argc!=3 ){
|
|
fprintf(stderr, "Usage: %s FLAG COUNT\n", argv[0]);
|
|
return 1;
|
|
}
|
|
cnt = atoi(argv[2]);
|
|
fg = atoi(argv[1]);
|
|
|
|
switch( fg % 3 ){
|
|
case 0: {
|
|
printf("Doing %d calls to C-lib sprintf()\n", cnt);
|
|
for(i=0; i<cnt; i++){
|
|
sprintf(zBuf, "%.26g", aVal[i%NN]);
|
|
}
|
|
break;
|
|
}
|
|
case 1: {
|
|
printf("Doing %d calls to sqlite3_snprintf()\n", cnt);
|
|
for(i=0; i<cnt; i++){
|
|
sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.26g", aVal[i%NN]);
|
|
}
|
|
break;
|
|
}
|
|
case 2: {
|
|
printf("Doing %d calls to sqlite3_snprintf() without long double\n", cnt);
|
|
sqlite3_test_control(SQLITE_TESTCTRL_USELONGDOUBLE, 0);
|
|
for(i=0; i<cnt; i++){
|
|
sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.26g", aVal[i%NN]);
|
|
}
|
|
break;
|
|
}
|
|
|
|
}
|
|
return 0;
|
|
}
|