mirror of
				https://git.kernel.org/pub/scm/network/wireless/iwd.git
				synced 2025-10-30 20:37:26 +01:00 
			
		
		
		
	util: add util_exponential_decay
This is copied from network.c that uses a static table to lookup exponential decay values by index (generated from 1/pow(n, 0.3)). network.c uses this for network ranking but it can be useful for BSS ranking as well if you need to apply some exponential backoff to a value.
This commit is contained in:
		
							parent
							
								
									c40e665094
								
							
						
					
					
						commit
						a910a21beb
					
				
							
								
								
									
										28
									
								
								src/util.c
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								src/util.c
									
									
									
									
									
								
							| @ -636,3 +636,31 @@ struct scan_freq_set *scan_freq_set_clone(const struct scan_freq_set *set, | ||||
| 
 | ||||
| 	return new; | ||||
| } | ||||
| 
 | ||||
| /* First 64 entries calculated by 1 / pow(n, 0.3) for n >= 1 */ | ||||
| static const double rankmod_table[] = { | ||||
| 	1.0000000000, 0.8122523964, 0.7192230933, 0.6597539554, | ||||
| 	0.6170338627, 0.5841906811, 0.5577898253, 0.5358867313, | ||||
| 	0.5172818580, 0.5011872336, 0.4870596972, 0.4745102806, | ||||
| 	0.4632516708, 0.4530661223, 0.4437850034, 0.4352752816, | ||||
| 	0.4274303178, 0.4201634287, 0.4134032816, 0.4070905315, | ||||
| 	0.4011753236, 0.3956154062, 0.3903746872, 0.3854221125, | ||||
| 	0.3807307877, 0.3762772797, 0.3720410580, 0.3680040435, | ||||
| 	0.3641502401, 0.3604654325, 0.3569369365, 0.3535533906, | ||||
| 	0.3503045821, 0.3471812999, 0.3441752105, 0.3412787518, | ||||
| 	0.3384850430, 0.3357878061, 0.3331812996, 0.3306602598, | ||||
| 	0.3282198502, 0.3258556179, 0.3235634544, 0.3213395618, | ||||
| 	0.3191804229, 0.3170827751, 0.3150435863, 0.3130600345, | ||||
| 	0.3111294892, 0.3092494947, 0.3074177553, 0.3056321221, | ||||
| 	0.3038905808, 0.3021912409, 0.3005323264, 0.2989121662, | ||||
| 	0.2973291870, 0.2957819051, 0.2942689208, 0.2927889114, | ||||
| 	0.2913406263, 0.2899228820, 0.2885345572, 0.2871745887, | ||||
| }; | ||||
| 
 | ||||
| double util_exponential_decay(unsigned int n) | ||||
| { | ||||
| 	if (n >= L_ARRAY_SIZE(rankmod_table)) | ||||
| 		return rankmod_table[L_ARRAY_SIZE(rankmod_table) - 1]; | ||||
| 
 | ||||
| 	return rankmod_table[n]; | ||||
| } | ||||
|  | ||||
| @ -141,4 +141,6 @@ struct scan_freq_set *scan_freq_set_clone(const struct scan_freq_set *set, | ||||
| 
 | ||||
| DEFINE_CLEANUP_FUNC(scan_freq_set_free); | ||||
| 
 | ||||
| double util_exponential_decay(unsigned int n); | ||||
| 
 | ||||
| #endif /* __UTIL_H */ | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 James Prestwood
						James Prestwood