| 380 | } |
| 381 | |
| 382 | auto KinectSource::ComputeDynamicValues(const std::uint16_t* values, std::size_t valueCount) -> DynamicValues |
| 383 | { |
| 384 | constexpr std::uint16_t MaxValue = std::numeric_limits<std::uint16_t>::max(); |
| 385 | |
| 386 | unsigned long long average = std::accumulate(values, values + valueCount, 0LL) / valueCount; |
| 387 | unsigned long long varianceAcc = std::accumulate(values, values + valueCount, 0LL, [average](unsigned long long init, unsigned long long delta) |
| 388 | { |
| 389 | return init + (delta - average) * (delta - average); // underflow allowed (will overflow back to the right value) |
| 390 | }); |
| 391 | |
| 392 | double variance = double(varianceAcc) / valueCount; |
| 393 | |
| 394 | double averageValue = double(average) / MaxValue; |
| 395 | double standardDeviation = std::sqrt(variance / MaxValue); |
| 396 | |
| 397 | return { averageValue, standardDeviation }; |
| 398 | } |
nothing calls this directly
no outgoing calls
no test coverage detected