Struct hilbert::normalize::FloatDataRange[][src]

pub struct FloatDataRange {
    pub low: f64,
    pub high: f64,
    pub scale: f64,
    pub bits_required: usize,
}
Expand description

The observed range of values seen in a set of points whose coordinates are signed 64-bit floats.

From this information we can determine how to translate the coordinates so that their normalized range has a low of zero. This permits us to use the fewest number of bits to represent them when constructing a Hilbert index.

Motivation.

  1. The Hilbert Curve transformation requires non-negative numbers, so all values must be translated until the lowest is zero. That means that if the lowest value is negative, we shift to the positive direction, or contrariwise to the negative direction.
  2. The execution time of the Hilbert transformation is directly proportional to the number of bits used to represent each value. Thus if we can sacrifice some precision, each value can be multiplied by a scale factor and rounded to the nearest integer to compress the value (and sacrifice information).

Fields

low: f64

Lowest value of any coordinate of any point in a collection of points.

high: f64

Highest value of any coordinate of any point in a collection of points.

scale: f64

Multiplier to apply before rounding to an integer value, sacrificing some precision. For example, if you want to encode values such that you preserve precision to the hundredth place, scale should be 100.

bits_required: usize

Minimum number of bits required to represent a normalized value without loss of information for the given scale factor.

Example:

  • If low is -5.02 and high is 3.13 then the range is 8.15. If scale is 100, the range becomes 815, so 10 bits are required to represent all values in that range.

Implementations

Create a FloatDataRange without reference to particular data.

Study all f64 coordinates in all points to find the minimum and maximum values.

Range from low to high value.

Normalize an f64 coordinate value, shifting it enough so that the minimum value found in any point is shifted to zero and the maximum value is shifted to range, and using the full number of bits required for the range multiplied by the scale.

Normalize an f64 coordinate value, shifting it enough so that the minimum value found in any point is shifted to zero and the maximum value is shifted to range, then optionally compressing the range by bit shifting such that no more than the given number of bits are required for the largest value.

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Performs the conversion.

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

The resulting type after obtaining ownership.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.