dartora

Curves

This module defines utility functions for non‑linear growth and smoothing curves used by the search scoring algorithm and the points system.

int stepwiseGrowth(num input, { double speed = 4.0, double length = 4.0, double factor = 0.5 })

Returns a non‑negative integer representing the stepwise growth of input. The idea is to reward repeated occurrences of a word in search scoring without linear explosion. The parameters adjust the shape of the curve:

The function computes log2(input) and a second curve based on (input - 1) / (log2(input) * speed). It then divides input by a linear combination of these curves to obtain a step count. The result is always non‑negative and symmetric around zero.

This function is used in Points to calculate the modifier for positive points: each time a word occurs in the search text, stepwiseGrowth(occurrenceCount) is added to the modifier. This yields diminishing returns for repeated matches.

double sigmoidCurve(num input, { double centerX = 1, double centerY = 0.8, double zeroY = 0.02 })

Computes a smoothed curve that maps input values to a range between 0 and 1. The curve is defined by:

Internally it constructs a helper function g(c) = a*ln(c) + b*c and uses a value k = f(centerX, centerY) * g(centerY) to compute a logistic‑like mapping. It then raises the result to a power so that sigmoidCurve(0) = zeroY. The resulting curve starts near zeroY, approaches centerY around centerX and tends toward 1 as input increases.

While not used in the default search scoring, sigmoidCurve() can be applied to normalise counts or scores. Its parameters allow shaping the curve to fit specific requirements.