PostgreSQL Source Code: src/include/utils/float.h File Reference (original) (raw)

#include <math.h>

Go to the source code of this file.

Functions
pg_noreturn void float_overflow_error (void)
pg_noreturn void float_underflow_error (void)
pg_noreturn void float_zero_divide_error (void)
int is_infinite (float8 val)
float8 float8in_internal (char *num, char **endptr_p, const char *type_name, const char *orig_string, struct Node *escontext)
float4 float4in_internal (char *num, char **endptr_p, const char *type_name, const char *orig_string, struct Node *escontext)
char * float8out_internal (float8 num)
int float4_cmp_internal (float4 a, float4 b)
int float8_cmp_internal (float8 a, float8 b)
static float4 get_float4_infinity (void)
static float8 get_float8_infinity (void)
static float4 get_float4_nan (void)
static float8 get_float8_nan (void)
static float4 float4_pl (const float4 val1, const float4 val2)
static float8 float8_pl (const float8 val1, const float8 val2)
static float4 float4_mi (const float4 val1, const float4 val2)
static float8 float8_mi (const float8 val1, const float8 val2)
static float4 float4_mul (const float4 val1, const float4 val2)
static float8 float8_mul (const float8 val1, const float8 val2)
static float4 float4_div (const float4 val1, const float4 val2)
static float8 float8_div (const float8 val1, const float8 val2)
static bool float4_eq (const float4 val1, const float4 val2)
static bool float8_eq (const float8 val1, const float8 val2)
static bool float4_ne (const float4 val1, const float4 val2)
static bool float8_ne (const float8 val1, const float8 val2)
static bool float4_lt (const float4 val1, const float4 val2)
static bool float8_lt (const float8 val1, const float8 val2)
static bool float4_le (const float4 val1, const float4 val2)
static bool float8_le (const float8 val1, const float8 val2)
static bool float4_gt (const float4 val1, const float4 val2)
static bool float8_gt (const float8 val1, const float8 val2)
static bool float4_ge (const float4 val1, const float4 val2)
static bool float8_ge (const float8 val1, const float8 val2)
static float4 float4_min (const float4 val1, const float4 val2)
static float8 float8_min (const float8 val1, const float8 val2)
static float4 float4_max (const float4 val1, const float4 val2)
static float8 float8_max (const float8 val1, const float8 val2)

M_PI

RADIANS_PER_DEGREE

#define RADIANS_PER_DEGREE 0.0174532925199432957692

Definition at line 26 of file float.h.

float4_cmp_internal()

float4_div()

float4_eq()

float4_ge()

float4_gt()

float4_le()

float4_lt()

float4_max()

float4_mi()

float4_min()

float4_mul()

float4_ne()

float4_pl()

float4in_internal()

Definition at line 183 of file float.c.

186{

187 float val;

188 char *endptr;

189

190

191

192

193

194

195

196

197 while (*num != '\0' && isspace((unsigned char) *num))

198 num++;

199

200

201

202

203

204 if (*num == '\0')

207 errmsg("invalid input syntax for type %s: \"%s\"",

209

212

213

214 if (endptr == num || errno != 0)

215 {

217

218

219

220

221

222

223

224

225

226

227

229 {

231 endptr = num + 3;

232 }

234 {

236 endptr = num + 8;

237 }

239 {

241 endptr = num + 9;

242 }

244 {

246 endptr = num + 9;

247 }

249 {

251 endptr = num + 3;

252 }

254 {

256 endptr = num + 4;

257 }

259 {

261 endptr = num + 4;

262 }

264 {

265

266

267

268

269

270

271

272 if (val == 0.0 ||

275#else

278 )

279 {

280

282

284

287 errmsg("\"%s\" is out of range for type real",

289 }

290 }

291 else

294 errmsg("invalid input syntax for type %s: \"%s\"",

296 }

297

298

299 while (*endptr != '\0' && isspace((unsigned char) *endptr))

300 endptr++;

301

302

305 else if (*endptr != '\0')

308 errmsg("invalid input syntax for type %s: \"%s\"",

310

311 return val;

312}

int errcode(int sqlerrcode)

#define ereturn(context, dummy_value,...)

static float4 get_float4_infinity(void)

static float4 get_float4_nan(void)

char * pstrdup(const char *in)

int pg_strncasecmp(const char *s1, const char *s2, size_t n)

References ereturn, errcode(), errmsg, fb(), get_float4_infinity(), get_float4_nan(), pg_strncasecmp(), pstrdup(), and val.

Referenced by float4in().

float8_cmp_internal()

Definition at line 910 of file float.c.

911{

913 return 1;

915 return -1;

916 return 0;

917}

static bool float8_lt(const float8 val1, const float8 val2)

static bool float8_gt(const float8 val1, const float8 val2)

References a, b, float8_gt(), and float8_lt().

Referenced by btfloat48cmp(), btfloat84cmp(), btfloat8cmp(), btfloat8fastcmp(), common_entry_cmp(), gbt_float8_ssup_cmp(), interval_cmp_lower(), interval_cmp_upper(), and pairingheap_GISTSearchItem_cmp().

float8_div()

Definition at line 193 of file float.h.

194{

196

204

205 return result;

206}

References fb(), float_overflow_error(), float_underflow_error(), float_zero_divide_error(), and unlikely.

Referenced by box_circle(), box_cn(), cash_div_float8(), circle_box(), circle_div_pt(), circle_poly(), degrees(), float48div(), float84div(), float8div(), g_box_consider_split(), line_distance(), line_eq(), line_interpt_line(), line_invsl(), line_perp(), line_sl(), lseg_center(), lseg_inside_poly(), path_area(), point_div_point(), point_invsl(), point_sl(), and poly_to_circle().

float8_eq()

float8_ge()

float8_gt()

float8_le()

float8_lt()

Definition at line 247 of file float.h.

References fb().

Referenced by adjustBox(), box_closept_lseg(), box_closept_point(), box_in(), box_recv(), dist_ppath_internal(), dist_ppoly_internal(), float48lt(), float84lt(), float8_cmp_internal(), float8_min(), float8lt(), float8smaller(), gist_box_picksplit(), lseg_closept_lseg(), make_bound_box(), path_distance(), and poly_distance().

float8_max()

float8_mi()

Definition at line 137 of file float.h.

138{

140

144

145 return result;

146}

References fb(), float_overflow_error(), and unlikely.

Referenced by box_ht(), box_penalty(), box_wd(), circle_above(), circle_below(), circle_box(), circle_contain(), circle_contained(), circle_distance(), circle_left(), circle_overabove(), circle_overright(), circle_poly(), circle_right(), computeDistance(), dist_cpoint(), dist_cpoly_internal(), dist_pc(), float48mi(), float84mi(), float8mi(), g_box_consider_split(), gist_box_picksplit(), gist_circle_compress(), gist_circle_consistent(), line_construct(), line_distance(), line_interpt_line(), lseg_crossing(), path_area(), point_div_point(), point_dt(), point_inside(), point_invsl(), point_mul_point(), point_sl(), point_sub_point(), and size_box().

float8_min()

float8_mul()

Definition at line 163 of file float.h.

164{

166

172

173 return result;

174}

References fb(), float_overflow_error(), float_underflow_error(), and unlikely.

Referenced by box_ar(), cash_mul_float8(), circle_ar(), circle_diameter(), circle_mul_pt(), circle_poly(), float48mul(), float84mul(), float8mul(), line_construct(), line_contain_point(), line_distance(), line_eq(), line_interpt_line(), line_perp(), lseg_crossing(), make_interval(), path_area(), point_div_point(), point_mul_point(), radians(), and size_box().

float8_ne()

float8_pl()

Definition at line 113 of file float.h.

114{

116

120

121 return result;

122}

References fb(), float_overflow_error(), and unlikely.

Referenced by box_circle(), box_cn(), circle_above(), circle_below(), circle_box(), circle_distance(), circle_left(), circle_overbelow(), circle_overlap(), circle_overleft(), circle_poly(), circle_right(), float48pl(), float84pl(), float8_combine(), float8_regr_combine(), float8pl(), gist_circle_compress(), gist_circle_consistent(), line_contain_point(), line_interpt_line(), lseg_center(), lseg_inside_poly(), on_ppath(), path_area(), path_length(), point_add_point(), point_div_point(), point_mul_point(), and poly_to_circle().

float8in_internal()

Definition at line 395 of file float.c.

398{

399 double val;

400 char *endptr;

401

402

403 while (*num != '\0' && isspace((unsigned char) *num))

404 num++;

405

406

407

408

409

410 if (*num == '\0')

413 errmsg("invalid input syntax for type %s: \"%s\"",

415

418

419

420 if (endptr == num || errno != 0)

421 {

423

424

425

426

427

428

429

430

431

432

433

435 {

437 endptr = num + 3;

438 }

440 {

442 endptr = num + 8;

443 }

445 {

447 endptr = num + 9;

448 }

450 {

452 endptr = num + 9;

453 }

455 {

457 endptr = num + 3;

458 }

460 {

462 endptr = num + 4;

463 }

465 {

467 endptr = num + 4;

468 }

470 {

471

472

473

474

475

476

477

478

479

480

481

483 {

485

489 errmsg("\"%s\" is out of range for type double precision",

491 }

492 }

493 else

496 errmsg("invalid input syntax for type %s: \"%s\"",

498 }

499

500

501 while (*endptr != '\0' && isspace((unsigned char) *endptr))

502 endptr++;

503

504

507 else if (*endptr != '\0')

510 errmsg("invalid input syntax for type %s: \"%s\"",

512

513 return val;

514}

static float8 get_float8_infinity(void)

static float8 get_float8_nan(void)

References ereturn, errcode(), errmsg, fb(), get_float8_infinity(), get_float8_nan(), pg_strncasecmp(), pstrdup(), and val.

Referenced by dependencies_scalar(), executeItemOptUnwrapTarget(), float8in(), and single_decode().

float8out_internal()

Definition at line 537 of file float.c.

538{

541

543 {

546 }

547

550}

int double_to_shortest_decimal_buf(double f, char *result)

Datum ascii(PG_FUNCTION_ARGS)

int pg_strfromd(char *str, size_t count, int precision, double value)

References ascii(), double_to_shortest_decimal_buf(), extra_float_digits, fb(), palloc(), and pg_strfromd().

Referenced by cube_out(), float8out(), line_out(), pair_encode(), and single_encode().

float_overflow_error()

Definition at line 86 of file float.c.

87{

90 errmsg("value out of range: overflow")));

91}

#define ereport(elevel,...)

References ereport, errcode(), errmsg, ERROR, and fb().

Referenced by dacos(), dacosd(), dasin(), dasind(), datan(), datan2(), datan2d(), datand(), dcbrt(), dcos(), dcosd(), derf(), derfc(), dexp(), dgamma(), dlgamma(), dlog1(), dlog10(), dpow(), dsin(), dsind(), dsqrt(), dtanh(), dtof(), float4_accum(), float4_dist(), float4_div(), float4_mi(), float4_mul(), float4_pl(), float8_accum(), float8_combine(), float8_dist(), float8_div(), float8_mi(), float8_mul(), float8_pl(), float8_regr_accum(), float8_regr_combine(), and gbt_float8_dist().

float_underflow_error()

Definition at line 94 of file float.c.

95{

98 errmsg("value out of range: underflow")));

99}

References ereport, errcode(), errmsg, ERROR, and fb().

Referenced by dcbrt(), dcosh(), dexp(), dgamma(), dlog1(), dlog10(), dpow(), dsqrt(), dtof(), float4_div(), float4_mul(), float8_div(), and float8_mul().

float_zero_divide_error()

get_float4_infinity()

get_float4_nan()

get_float8_infinity()

Definition at line 65 of file float.h.

References fb().

Referenced by brin_minmax_multi_distance_float4(), brin_minmax_multi_distance_float8(), compute_range_stats(), datanh(), dcosh(), dsinh(), float8in_internal(), gbt_ts_dist(), get_distance(), get_distance(), gistindex_keytest(), initRectBox(), leftmostvalue_float8(), line_invsl(), line_sl(), NonFiniteIntervalPart(), NonFiniteTimestampTzPart(), numeric_float8(), point_invsl(), point_sl(), size_box(), spg_kd_inner_consistent(), spg_quad_inner_consistent(), and spgbeginscan().

get_float8_nan()

Definition at line 84 of file float.h.

References fb().

Referenced by dacos(), dacosd(), dasin(), dasind(), datan(), datan2(), datan2d(), datand(), dcos(), dcosd(), dcot(), dcotd(), dgamma(), dpow(), dsin(), dsind(), dtan(), dtand(), float4_accum(), float8_accum(), float8_regr_accum(), float8_regr_combine(), float8in_internal(), hashfloat4(), hashfloat4extended(), hashfloat8(), hashfloat8extended(), line_closept_point(), numeric_float8(), numeric_float8_no_overflow(), and point_box_distance().

is_infinite()

Definition at line 118 of file float.c.

119{

121

122 if (inf == 0)

123 return 0;

124 else if (val > 0)

125 return 1;

126 else

127 return -1;

128}

References fb(), and val.

extra_float_digits