Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f4554d8b authored by Satoshi Kataoka's avatar Satoshi Kataoka Committed by Ken Wakasa
Browse files

Fix an issue on FP calculation diff of osx and linux

sugar on mac

result_type=1 expected=<1093> actual=<1047>
result_type=4 expected=<730> actual=<698>
result_type=5 expected=<177> actual=<173>

sugar on linux

result_type=1 expected=<1093> actual=<1047>
result_type=4 expected=<730> actual=<698>
result_type=5 expected=<177> actual=<173>

Change-Id: I4cd39becb0de4076dd37d870adda6463a96de424
parent 81d97eec
Loading
Loading
Loading
Loading
+13 −8
Original line number Original line Diff line number Diff line
@@ -25,14 +25,17 @@


#define M_PI_F 3.14159265f
#define M_PI_F 3.14159265f


namespace latinime {
#define ROUND_FLOAT_10000(f) ((f) < 1000.0f && (f) > 0.001f) \
        ? (floorf((f) * 10000.0f) / 10000.0f) : (f)


static inline float squareFloat(float x) {
#define SQUARE_FLOAT(x) ((x) * (x))
    return x * x;

}
namespace latinime {


static inline float getSquaredDistanceFloat(float x1, float y1, float x2, float y2) {
static inline float getSquaredDistanceFloat(float x1, float y1, float x2, float y2) {
    return squareFloat(x1 - x2) + squareFloat(y1 - y2);
    const float deltaX = x1 - x2;
    const float deltaY = y1 - y2;
    return SQUARE_FLOAT(deltaX) + SQUARE_FLOAT(deltaY);
}
}


static inline float getDistanceFloat(float x1, float y1, float x2, float y2) {
static inline float getDistanceFloat(float x1, float y1, float x2, float y2) {
@@ -52,9 +55,11 @@ static inline float getAngle(int x1, int y1, int x2, int y2) {
}
}


static inline float getAngleDiff(float a1, float a2) {
static inline float getAngleDiff(float a1, float a2) {
    const float diff = fabsf(a1 - a2);
    const float deltaA = fabsf(a1 - a2);
    const float diff = ROUND_FLOAT_10000(deltaA);
    if (diff > M_PI_F) {
    if (diff > M_PI_F) {
        return 2.0f * M_PI_F - diff;
        const float normalizedDiff = 2.0f * M_PI_F - diff;
        return ROUND_FLOAT_10000(normalizedDiff);
    }
    }
    return diff;
    return diff;
}
}
@@ -76,7 +81,7 @@ static inline float pointToLineSegSquaredDistanceFloat(
    const float ray2y = y2 - y1;
    const float ray2y = y2 - y1;


    const float dotProduct = ray1x * ray2x + ray1y * ray2y;
    const float dotProduct = ray1x * ray2x + ray1y * ray2y;
    const float lineLengthSqr = squareFloat(ray2x) + squareFloat(ray2y);
    const float lineLengthSqr = SQUARE_FLOAT(ray2x) + SQUARE_FLOAT(ray2y);
    const float projectionLengthSqr = dotProduct / lineLengthSqr;
    const float projectionLengthSqr = dotProduct / lineLengthSqr;


    float projectionX;
    float projectionX;
+3 −1
Original line number Original line Diff line number Diff line
@@ -141,7 +141,9 @@ bool ProximityInfo::hasSpaceProximity(const int x, const int y) const {


static inline float getNormalizedSquaredDistanceFloat(float x1, float y1, float x2, float y2,
static inline float getNormalizedSquaredDistanceFloat(float x1, float y1, float x2, float y2,
        float scale) {
        float scale) {
    return squareFloat((x1 - x2) / scale) + squareFloat((y1 - y2) / scale);
    const float deltaX = x1 - x2;
    const float deltaY = y1 - y2;
    return (SQUARE_FLOAT(deltaX) + SQUARE_FLOAT(deltaY)) / SQUARE_FLOAT(scale);
}
}


float ProximityInfo::getNormalizedSquaredDistanceFromCenterFloat(
float ProximityInfo::getNormalizedSquaredDistanceFromCenterFloat(
+4 −0
Original line number Original line Diff line number Diff line
@@ -177,6 +177,10 @@ void ProximityInfoState::initInputParams(const int pointerId, const float maxPoi
                hypotf(mProximityInfo->getKeyboardWidth(), mProximityInfo->getKeyboardHeight())
                hypotf(mProximityInfo->getKeyboardWidth(), mProximityInfo->getKeyboardHeight())
                * READ_FORWORD_LENGTH_SCALE);
                * READ_FORWORD_LENGTH_SCALE);
        for (int i = 0; i < mInputSize; ++i) {
        for (int i = 0; i < mInputSize; ++i) {
            if (DEBUG_GEO_FULL) {
                AKLOGI("Sampled(%d): x = %d, y = %d, time = %d", i, mInputXs[i], mInputYs[i],
                        mTimes[i]);
            }
            for (int j = max(i + 1, lastSavedInputSize); j < mInputSize; ++j) {
            for (int j = max(i + 1, lastSavedInputSize); j < mInputSize; ++j) {
                if (mLengthCache[j] - mLengthCache[i] >= readForwordLength) {
                if (mLengthCache[j] - mLengthCache[i] >= readForwordLength) {
                    break;
                    break;