I wrote a little function that has to work with big numbers CREATE OR REPLACE FUNCTION blast_evalue(seq_len bigint, db_size bigint, bit_score double precision) RETURNS double precision AS $$ BEGIN RETURN 2^(bit_score) * db_size * seq_len; END; $$ LANGUAGE 'plpgsql' IMMUTABLE RETURNS NULL ON NULL INPUT;
but it doesn't work properly unless I cast the db_size parameter when I call the function: select blast_evalue(273, 8903836, -55.4546); blast_evalue -------------- 2430747228 <- wrong number. This is 273 * 8903836 (1 row) select blast_evalue(273, 8903836::bigint, -55.4546); blast_evalue --------------------- 4.9231356421437e-08 <- that's correct (1 row) I don't understand why the cast is necessary. Is there a way to make this work without it? Thanks Luca ---------------------------(end of broadcast)--------------------------- TIP 2: Don't 'kill -9' the postmaster