Sorry, I think I gave you slightly buggy instructions. I just realized
that max() should be the max true value capable of being stored, which
should be less than the infinity value. std::numeric_limits<double>
provides another function named infinity() for getting positive
infinity. I believe this value will be different than max().

Sorry for the mistake.

John

-----Original Message-----
From: sqlite-users-boun...@sqlite.org
[mailto:sqlite-users-boun...@sqlite.org] On Behalf Of Michael Chen
Sent: Monday, October 19, 2009 11:40 PM
To: General Discussion of SQLite Database
Subject: Re: [sqlite] Infinity

Thanks John. After incorporate a few changes, the code can compile and
run.
The result seems reasonable, the input infinity
std::numeric_limits<double>::max() is sent to and retrieved from a
sqlite3
database correctly.

--terminal output

sqlite3 tempdb

sqlite> select * from tl;
1.1
1.79769313486232e+308
-1.79769313486232e+308
3.3


--source code --

#include <limits>
#include <string>
#include <iostream>
#include <cassert>
#include <sqlite3.h>
using namespace std;

int main(){
double infinity =   std::numeric_limits<double>::max();
double ninfinity =  - std::numeric_limits<double>::max();
 sqlite3 *db;
  char *zErrMsg = 0;
  int rc;
  rc = sqlite3_open("tempdb", &db);
  if( rc ){
    fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
    sqlite3_close(db);
    exit(1);
  }

 sqlite3_stmt* create_tl;
  rc = sqlite3_prepare_v2(db, "create table tl (number real)", -1,
&create_tl,NULL);

  if ( rc != SQLITE_OK) exit(rc);
  rc = sqlite3_step(create_tl);
  if ( rc != SQLITE_DONE) exit(rc);

  sqlite3_stmt* insert_tl;
  rc = sqlite3_prepare_v2(db,"insert into tl values(:number)",-1,
&insert_tl,NULL);
  if ( rc != SQLITE_OK) exit(rc);

  sqlite3_bind_double(insert_tl, 1, 1.1);
  rc = sqlite3_step(insert_tl);
  if (rc != SQLITE_DONE)
    exit(rc);

  sqlite3_reset(insert_tl);
  sqlite3_bind_double(insert_tl, 1, infinity);
  rc = sqlite3_step(insert_tl);
  if (rc != SQLITE_DONE)
    exit(rc);

  sqlite3_reset(insert_tl);
  sqlite3_bind_double(insert_tl, 1, ninfinity);
  rc = sqlite3_step(insert_tl);
  if (rc != SQLITE_DONE)
    exit(rc);

  sqlite3_reset(insert_tl);
  sqlite3_bind_double(insert_tl, 1, 3.3);
  rc = sqlite3_step(insert_tl);
  if (rc != SQLITE_DONE)
    exit(rc);


  sqlite3_stmt* select_tl;
  rc = sqlite3_prepare_v2(db, "select * from tl",-1,&select_tl,NULL);
  if (rc != SQLITE_OK)
    exit(rc);

  while ( sqlite3_step(select_tl) == SQLITE_ROW){
    printf("%e",sqlite3_column_double(select_tl,0));
    printf("\n");
  }

  if (rc != SQLITE_DONE)
    exit(rc);
  sqlite3_finalize(select_tl);

  sqlite3_close(db);
  printf("exit normally\n");
}




-- 
Best regards,
Michael Chen
Google Voice Phone.: 847-448-0647
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to