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


Go to the source code of this file.
◆ 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}