Re: somebody could explain this?

From: Csaba Nagy <nagy(at)ecircle-ag(dot)com>
To: Cristian Prieto <cristian(at)clickdiario(dot)com>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: somebody could explain this?
Date: 2005-11-04 16:31:20
Message-ID: 1131121880.4892.35.camel@coppola.muc.ecircle.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Cristian,

I bet it's related to some rounding issue and the fact that floating
formats are approximative even for small integers.
Probably 12 ands up being slightly less in floating format (something
like 11.999...), and the cast to integer is truncating it.
Not 100% sure though... read up on your API, I'm not a C programmer :-)

HTH,
Csaba.

On Fri, 2005-11-04 at 17:16, Cristian Prieto wrote:
> Hello, I'm using PostgreSQL 8.0.4 in Fedora Core 3, right now I'm learning a
> little about the postgresql internals and the way some kind of SPs could be
> written in c language; I found something really weird and I cannot explain
> to me this behavior:
>
> #include "postgres.h"
> #include "fmgr.h"
>
> PG_FUNCTION_INFO_V1(test);
>
> Datum
> repeat_item(PG_FUNCTION_ARGS)
> {
> int num_times;
>
> num_times = PG_GETARG_FLOAT8(0) * 100;
> PG_RETURN_INT32(num_times);
> }
>
>
> Inside psql this happens:
>
> # Create or replace function test(float) returns integer as 'test.so'
> language 'c' stable;
>
> select test(0.1);
> Returns 10
>
> Select test(0.11);
> Returns 11
>
> Select test(0.12)
> Returns 11
>
> Select test(0.13)
> Returns 13
>
> Select test(0.14)
> Returns 14
>
> Select test(0.15)
> Returns 14
>
>
> What Is happening here?
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 9: In versions below 8.0, the planner will ignore your desire to
> choose an index scan if your joining column's datatypes do not
> match

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Andrew Dunstan 2005-11-04 16:45:31 Re: somebody could explain this?
Previous Message Tom Lane 2005-11-04 16:22:09 PG 8.1 supported platforms list: IRIX is MIA