1*9ab04d7eSAndy Shevchenko /* SPDX-License-Identifier: LGPL-2.1-or-later */ 2f97fa3dcSAndy Shevchenko /* 3f97fa3dcSAndy Shevchenko * Provides fixed-point logarithm operations. 4f97fa3dcSAndy Shevchenko * 5f97fa3dcSAndy Shevchenko * Copyright (C) 2006 Christoph Pfister ([email protected]) 6f97fa3dcSAndy Shevchenko */ 7f97fa3dcSAndy Shevchenko 8f97fa3dcSAndy Shevchenko #ifndef __LINUX_INT_LOG_H 9f97fa3dcSAndy Shevchenko #define __LINUX_INT_LOG_H 10f97fa3dcSAndy Shevchenko 11f97fa3dcSAndy Shevchenko #include <linux/types.h> 12f97fa3dcSAndy Shevchenko 13f97fa3dcSAndy Shevchenko /** 14f97fa3dcSAndy Shevchenko * intlog2 - computes log2 of a value; the result is shifted left by 24 bits 15f97fa3dcSAndy Shevchenko * 16f97fa3dcSAndy Shevchenko * @value: The value (must be != 0) 17f97fa3dcSAndy Shevchenko * 18f97fa3dcSAndy Shevchenko * to use rational values you can use the following method: 19f97fa3dcSAndy Shevchenko * 20f97fa3dcSAndy Shevchenko * intlog2(value) = intlog2(value * 2^x) - x * 2^24 21f97fa3dcSAndy Shevchenko * 22f97fa3dcSAndy Shevchenko * Some usecase examples: 23f97fa3dcSAndy Shevchenko * 24f97fa3dcSAndy Shevchenko * intlog2(8) will give 3 << 24 = 3 * 2^24 25f97fa3dcSAndy Shevchenko * 26f97fa3dcSAndy Shevchenko * intlog2(9) will give 3 << 24 + ... = 3.16... * 2^24 27f97fa3dcSAndy Shevchenko * 28f97fa3dcSAndy Shevchenko * intlog2(1.5) = intlog2(3) - 2^24 = 0.584... * 2^24 29f97fa3dcSAndy Shevchenko * 30f97fa3dcSAndy Shevchenko * 31f97fa3dcSAndy Shevchenko * return: log2(value) * 2^24 32f97fa3dcSAndy Shevchenko */ 33f97fa3dcSAndy Shevchenko extern unsigned int intlog2(u32 value); 34f97fa3dcSAndy Shevchenko 35f97fa3dcSAndy Shevchenko /** 36f97fa3dcSAndy Shevchenko * intlog10 - computes log10 of a value; the result is shifted left by 24 bits 37f97fa3dcSAndy Shevchenko * 38f97fa3dcSAndy Shevchenko * @value: The value (must be != 0) 39f97fa3dcSAndy Shevchenko * 40f97fa3dcSAndy Shevchenko * to use rational values you can use the following method: 41f97fa3dcSAndy Shevchenko * 42f97fa3dcSAndy Shevchenko * intlog10(value) = intlog10(value * 10^x) - x * 2^24 43f97fa3dcSAndy Shevchenko * 44f97fa3dcSAndy Shevchenko * An usecase example: 45f97fa3dcSAndy Shevchenko * 46f97fa3dcSAndy Shevchenko * intlog10(1000) will give 3 << 24 = 3 * 2^24 47f97fa3dcSAndy Shevchenko * 48f97fa3dcSAndy Shevchenko * due to the implementation intlog10(1000) might be not exactly 3 * 2^24 49f97fa3dcSAndy Shevchenko * 50f97fa3dcSAndy Shevchenko * look at intlog2 for similar examples 51f97fa3dcSAndy Shevchenko * 52f97fa3dcSAndy Shevchenko * return: log10(value) * 2^24 53f97fa3dcSAndy Shevchenko */ 54f97fa3dcSAndy Shevchenko extern unsigned int intlog10(u32 value); 55f97fa3dcSAndy Shevchenko 56f97fa3dcSAndy Shevchenko #endif 57