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

Commit f3d9e036 authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi Committed by Android (Google) Code Review
Browse files

Merge "Separate NormalDistribution from ProximityInfoUtils."

parents 76c930ee 3bf9647a
Loading
Loading
Loading
Loading
+49 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2014 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef LATINIME_NORMAL_DISTRIBUTION_H
#define LATINIME_NORMAL_DISTRIBUTION_H

#include <cmath>

#include "defines.h"

namespace latinime {

// Normal distribution N(u, sigma^2).
class NormalDistribution {
 public:
    NormalDistribution(const float u, const float sigma)
            : mU(u),
              mPreComputedNonExpPart(1.0f / sqrtf(2.0f * M_PI_F
                      * GeometryUtils::SQUARE_FLOAT(sigma))),
              mPreComputedExponentPart(-1.0f / (2.0f * GeometryUtils::SQUARE_FLOAT(sigma))) {}

    float getProbabilityDensity(const float x) const {
        const float shiftedX = x - mU;
        return mPreComputedNonExpPart
                * expf(mPreComputedExponentPart * GeometryUtils::SQUARE_FLOAT(shiftedX));
    }

 private:
    DISALLOW_IMPLICIT_CONSTRUCTORS(NormalDistribution);

    const float mU; // mean value
    const float mPreComputedNonExpPart; // = 1 / sqrt(2 * PI * sigma^2)
    const float mPreComputedExponentPart; // = -1 / (2 * sigma^2)
};
} // namespace latinime
#endif // LATINIME_NORMAL_DISTRIBUTION_H
+3 −2
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@

#include "defines.h"
#include "suggest/core/layout/geometry_utils.h"
#include "suggest/core/layout/normal_distribution.h"
#include "suggest/core/layout/proximity_info.h"
#include "suggest/core/layout/proximity_info_params.h"

@@ -717,8 +718,8 @@ namespace latinime {
        const float sigma = speedxAngleRate + speedxNearestKeyDistanceRate
                + ProximityInfoParams::MIN_STANDARD_DEVIATION;

        ProximityInfoUtils::NormalDistribution
                distribution(ProximityInfoParams::CENTER_VALUE_OF_NORMALIZED_DISTRIBUTION, sigma);
        NormalDistribution distribution(
                ProximityInfoParams::CENTER_VALUE_OF_NORMALIZED_DISTRIBUTION, sigma);
        // Summing up probability densities of all near keys.
        float sumOfProbabilityDensities = 0.0f;
        for (int j = 0; j < keyCount; ++j) {
+0 −22
Original line number Diff line number Diff line
@@ -125,28 +125,6 @@ class ProximityInfoUtils {
         return type == MATCH_CHAR || type == PROXIMITY_CHAR || type == ADDITIONAL_PROXIMITY_CHAR;
     }

    // Normal distribution N(u, sigma^2).
    struct NormalDistribution {
     public:
        NormalDistribution(const float u, const float sigma)
                : mU(u),
                  mPreComputedNonExpPart(1.0f / sqrtf(2.0f * M_PI_F
                          * GeometryUtils::SQUARE_FLOAT(sigma))),
                  mPreComputedExponentPart(-1.0f / (2.0f * GeometryUtils::SQUARE_FLOAT(sigma))) {}

        float getProbabilityDensity(const float x) const {
            const float shiftedX = x - mU;
            return mPreComputedNonExpPart
                    * expf(mPreComputedExponentPart * GeometryUtils::SQUARE_FLOAT(shiftedX));
        }

     private:
        DISALLOW_IMPLICIT_CONSTRUCTORS(NormalDistribution);
        const float mU; // mean value
        const float mPreComputedNonExpPart; // = 1 / sqrt(2 * PI * sigma^2)
        const float mPreComputedExponentPart; // = -1 / (2 * sigma^2)
    }; // struct NormalDistribution

 private:
    DISALLOW_IMPLICIT_CONSTRUCTORS(ProximityInfoUtils);