View Single Post
  #1   Spotlight this post!  
Unread 24-01-2010, 17:10
FRC4ME FRC4ME is offline
Registered User
FRC #0339
 
Join Date: Feb 2008
Rookie Year: 2007
Location: Fredericksburg, VA
Posts: 324
FRC4ME has a brilliant futureFRC4ME has a brilliant futureFRC4ME has a brilliant futureFRC4ME has a brilliant futureFRC4ME has a brilliant futureFRC4ME has a brilliant futureFRC4ME has a brilliant futureFRC4ME has a brilliant futureFRC4ME has a brilliant futureFRC4ME has a brilliant futureFRC4ME has a brilliant future
Java PWM getPosition() integer division bug?

After much troubleshooting trying to figure out why Servo.get() was returning 0.0 for any servo position other than 1.0, I noticed the following code in edu.wpi.first.wpilibj.PWM:

Code:
public double getPosition() {
    int value = getRaw();
    if (value < getMinNegativePwm()) {
        return 0.0;
    } else if (value > getMaxPositivePwm()) {
        return 1.0;
    } else {
        return (value - getMinNegativePwm()) / getFullRangeScaleFactor();
    }
}
Notice the final return statement. value, getMinNegativePwm(), and getFullRangeScaleFactor() are all of type int. Would this not cause the integer division to truncate to 0 for any result less than 1? I checked the C++ version of the same function, and sure enough, the numerator and denominator of the fraction are cast to float before the division.
__________________
Go directly to queue. Do not pass pit.
Reply With Quote