[ library(ic) | Reference Manual | Alphabetic Index ]
# locate(+Vars, ++Precision, ++LinLog)

Locate solution intervals for Vars by splitting and search.
*Vars*
- Collection (a la collection_to_list/2) of variables
*Precision*
- Minimum required precision (float)
*LinLog*
- Domain splitting method (lin or log)

## Description

Locate solution intervals for the given variables with the required
precision. This works well if the problem has a finite number of
solutions. locate/2,3 work by nondeterministically splitting the
intervals of the variables until they are narrower than Precision (in
either absolute or relative terms).

The LinLog parameter guides the way domains are split. If it is set to
`lin` then the split is linear (i.e. the arithmetic mean of the bounds is
used). If it is set to `log`, the split is logarithmic (i.e. the geometric
mean of the bounds is used). Note that if `log` is used, there will be
roughly the same number of representable floating point numbers on either
side of the split, due to the logarithmic distribution of these numbers.

locate/3 is defined in terms of locate/4 as follows:

locate(Vars, Precision, LinLog) :- locate(Vars, [], Precision, LinLog).

## See Also

locate / 2, locate / 4, squash / 3, lists : collection_to_list / 2