Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/third_party/rust/headers/   (Firefox Browser Version 153.0.1©)  Datei vom 27.6.2026 mit Größe 3 kB image not shown  

Impressum spgproc.c   Interaktion und
PortierbarkeitC

 

/*-------------------------------------------------------------------------
 *
 * spgproc.c
 *   Common supporting procedures for SP-GiST opclasses.
 *
 *
 * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 * IDENTIFICATION
 *   src/backend/access/spgist/spgproc.c
 *
 *-------------------------------------------------------------------------
 */


#include "postgres.h"

#include <math.h>

#include "access/spgist_private.h"
#include "utils/float.h"
#include "utils/fmgrprotos.h"
#include "utils/geo_decls.h"

#define point_point_distance(p1,p2) \
 DatumGetFloat8(DirectFunctionCall2(point_distance, \
            PointPGetDatum(p1), PointPGetDatum(p2)))

/* Point-box distance in the assumption that box is aligned by axis */
static double
point_box_distance(Point *point, BOX *box)
{
 double  dx,
    dy;

 if (isnan(point->x) || isnan(box->low.x) ||
  isnan(point->y) || isnan(box->low.y))
  return get_float8_nan();

 if (point->x < box->low.x)
  dx = box->low.x - point->x;
 else if (point->x > box->high.x)
  dx = point->x - box->high.x;
 else
  dx = 0.0;

 if (point->y < box->low.y)
  dy = box->low.y - point->y;
 else if (point->y > box->high.y)
  dy = point->y - box->high.y;
 else
  dy = 0.0;

 return HYPOT(dx, dy);
}

/*
 * Returns distances from given key to array of ordering scan keys.  Leaf key
 * is expected to be point, non-leaf key is expected to be box.  Scan key
 * arguments are expected to be points.
 */

double *
spg_key_orderbys_distances(Datum key, bool isLeaf,
         ScanKey orderbys, int norderbys)
{
 int   sk_num;
 double    *distances = (double *) palloc(norderbys * sizeof(double)),
      *distance = distances;

 for (sk_num = 0; sk_num < norderbys; ++sk_num, ++orderbys, ++distance)
 {
  Point    *point = DatumGetPointP(orderbys->sk_argument);

  *distance = isLeaf ? point_point_distance(point, DatumGetPointP(key))
   : point_box_distance(point, DatumGetBoxP(key));
 }

 return distances;
}

BOX *
box_copy(BOX *orig)
{
 BOX     *result = palloc(sizeof(BOX));

 *result = *orig;
 return result;
}

Messung V0.5 in Prozent
C=83 H=98 G=90

¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.12Angebot  (Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können 2026-09-28) ¤

*Eine klare Vorstellung vom Zielzustand






Wurzel

Bemerkung:

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Anfrage:

Dauer der Verarbeitung:

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.