// Copyright (c) 2021 Mobvoi Inc (Zhendong Peng) // // 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. #include "utils/utils.h" #include #include #include "utils/log.h" namespace wenet { float LogAdd(float x, float y) { static float num_min = -std::numeric_limits::max(); if (x <= num_min) return y; if (y <= num_min) return x; float xmax = std::max(x, y); return std::log(std::exp(x - xmax) + std::exp(y - xmax)) + xmax; } } // namespace wenet