Skip to content

Fix off-by-one calculation of number of points - #42

Merged
keenanlang merged 1 commit into
epics-modules:masterfrom
jlmuir:fix-npts-calc
Sep 28, 2026
Merged

keenanlang merged 1 commit into
epics-modules:masterfrom
jlmuir:fix-npts-calc

Conversation

@jlmuir

@jlmuir jlmuir commented Sep 26, 2026

Copy link
Copy Markdown
Contributor

When changing a linear scan positioner step size (PnSI), the number of points (NPTS) is sometimes incorrectly calculated as one less than it should be. Fix this and similar NPTS variable assignments by rounding the result of the double expression before assigning to the NPTS variable of type epicsInt32. See also the Same sscan record step size for all positioners not possible? EPICS Tech-Talk mailing list thread.

When changing a linear scan positioner step size (PnSI), the number of
points (NPTS) is sometimes incorrectly calculated as one less than it
should be.

For example, with positioner 1 configured as

  SCAN MODE: LINEAR
  START: 0.0
  CENTER: -0.7
  END: -1.4
  STEP: -0.05
  WIDTH: -1.4
  ABS/REL: RELATIVE

, NPTS is calculated as 28, but that's wrong; it should be 29.

This miscalculation occurs when assigning the result of the calculated
NPTS double expression to the NPTS variable of type epicsInt32.  In the
above example, the calculated NPTS double expression evaluates to

  28.9999999999999964

, but when assigned to the NPTS variable of type epicsInt32, the value
becomes

  28

which is of course wrong.

Fix this and similar NPTS variable assignments by rounding the result
of the double expression before assigning to the NPTS variable of type
epicsInt32.
@keenanlang
keenanlang merged commit ce9660c into epics-modules:master Sep 28, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants