Package org.openjdk.jmc.common.unit
Class LongPreOffsetTransform
java.lang.Object
org.openjdk.jmc.common.unit.LongPreOffsetTransform
- All Implemented Interfaces:
IScalarAffineTransform
Transform that adds an offset first and then multiplies with the
multiplier. This is typically used to reduce cancellation errors when the offset is larger than
can be accurately represented in a double.-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionconcat(IScalarAffineTransform innerTransform) Concatenate this transform withinnerTransform, such that applying the resulting transform is equivalent to first applyinginnerTransformand then applying this transform on the resulting value.booleandoubledoubleinthashCode()invert()invertAndConcat(IScalarAffineTransform innerTransform) Concatenate the inverse of this transform withinnerTransform, such that applying the resulting transform is equivalent to first applyinginnerTransformand then applying this inverse of this transform on the resulting value.booleanbooleanisUnity()doubletargetFloor(double srcNumericalValue) longtargetFloor(long srcNumericalValue) inttargetIntFloor(Number srcNumericalValue) targetNumber(long srcNumericalValue) targetNumber(Number srcNumericalValue) booleantargetOutOfRange(double srcNumericalValue, long maxAbsValue) booleantargetOutOfRange(long srcNumericalValue, long maxAbsValue) doubletargetValue(double srcNumericalValue) longtargetValue(long srcNumericalValue)
-
Constructor Details
-
LongPreOffsetTransform
public LongPreOffsetTransform(long preOffset, double multiplier)
-
-
Method Details
-
getOffset
public double getOffset()- Specified by:
getOffsetin interfaceIScalarAffineTransform- Returns:
- the offset to be added (after the source value has been multiplied with the
multiplier)
-
getMultiplier
public double getMultiplier()- Specified by:
getMultiplierin interfaceIScalarAffineTransform- Returns:
- the multiplier which source values should be multiplied with (before the
offsetis added)
-
equals
-
hashCode
public int hashCode() -
targetOutOfRange
public boolean targetOutOfRange(long srcNumericalValue, long maxAbsValue) - Specified by:
targetOutOfRangein interfaceIScalarAffineTransform
-
targetOutOfRange
public boolean targetOutOfRange(double srcNumericalValue, long maxAbsValue) - Specified by:
targetOutOfRangein interfaceIScalarAffineTransform
-
targetValue
public long targetValue(long srcNumericalValue) - Specified by:
targetValuein interfaceIScalarAffineTransform- Parameters:
srcNumericalValue- a numerical quantity value, expressed in the source unit- Returns:
- the corresponding numerical quantity value, when expressed in the target unit,
rounded to the closest integer that can be represented by a
long
-
targetFloor
public long targetFloor(long srcNumericalValue) - Specified by:
targetFloorin interfaceIScalarAffineTransform- Parameters:
srcNumericalValue- a numerical quantity value, expressed in the source unit- Returns:
- the floor of the corresponding numerical quantity value, when expressed in the target
unit, clamped to a
long
-
targetFloor
public double targetFloor(double srcNumericalValue) - Specified by:
targetFloorin interfaceIScalarAffineTransform- Parameters:
srcNumericalValue- a numerical quantity value, expressed in the source unit- Returns:
- the floor of the corresponding numerical quantity value, when expressed in the target unit
-
targetIntFloor
- Specified by:
targetIntFloorin interfaceIScalarAffineTransform- Parameters:
srcNumericalValue- a numerical quantity value, expressed in the source unit- Returns:
- the floor of the corresponding numerical quantity value, when expressed in the target
unit, clamped to an
int
-
targetNumber
- Specified by:
targetNumberin interfaceIScalarAffineTransform- Parameters:
srcNumericalValue- an exact numerical quantity value, expressed in the source unit- Returns:
- the corresponding numerical quantity value, when expressed in the target unit, as a
Longif it can exactly be represented in one, otherwise as some otherNumberwith at least the precision ofdouble
-
targetNumber
- Specified by:
targetNumberin interfaceIScalarAffineTransform- Parameters:
srcNumericalValue- an exact or inexact numerical quantity value, expressed in the source unit- Returns:
- the corresponding numerical quantity value, when expressed in the target unit, as a
Longif it can exactly be represented in one, otherwise as some otherNumberwith at least the precision ofdouble
-
targetValue
public double targetValue(double srcNumericalValue) - Specified by:
targetValuein interfaceIScalarAffineTransform- Parameters:
srcNumericalValue- a numerical quantity value, expressed in the source unit- Returns:
- the corresponding numerical quantity value, when expressed in the target unit
-
invert
- Specified by:
invertin interfaceIScalarAffineTransform- Returns:
- the inverse transform
-
isUnity
public boolean isUnity()- Specified by:
isUnityin interfaceIScalarAffineTransform- Returns:
- true iff this represents the identity transform
-
isInteger
public boolean isInteger()- Specified by:
isIntegerin interfaceIScalarAffineTransform- Returns:
- true iff this transform can exactly be described by an integer multiplier followed by an integer offset
-
concat
Description copied from interface:IScalarAffineTransformConcatenate this transform withinnerTransform, such that applying the resulting transform is equivalent to first applyinginnerTransformand then applying this transform on the resulting value. That is, R(v) = T(I(v)), where R(v) is the resulting transform, T(v) is this transform, and I(v) isinnerTransform.In this snippet,
v1andv2should be equal, apart from numerical precision, for anyv.IScalarAffineTransform R, T = ..., I = ...; double v = ...; R = T.concat(I); double v1 = R.targetValue(v); double v2 = T.targetValue(I.targetValue(v));
- Specified by:
concatin interfaceIScalarAffineTransform- Parameters:
innerTransform- the transform that should be applied before this transform- Returns:
- the concatenated transform
-
invertAndConcat
Description copied from interface:IScalarAffineTransformConcatenate the inverse of this transform withinnerTransform, such that applying the resulting transform is equivalent to first applyinginnerTransformand then applying this inverse of this transform on the resulting value. That is, R(v) = T-1(I(v)), where R(v) is the resulting transform, T-1(v) is the inverse of this transform, and I(v) isinnerTransform.In this snippet,
v1andv2should be equal, apart from numerical precision, for anyv.IScalarAffineTransform R, T = ..., I = ...; double v = ...; R = T.invertAndConcat(I); double v1 = R.targetValue(v); double v2 = T.invert().targetValue(I.targetValue(v));
- Specified by:
invertAndConcatin interfaceIScalarAffineTransform- Parameters:
innerTransform- the transform that should be applied before this transform- Returns:
- the concatenated transform
-