// Copyright (C) 2022 NHR@FAU, University Erlangen-Nuremberg. // All rights reserved. // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. package importer import ( "math" ccunits "github.com/ClusterCockpit/cc-units" ) func getNormalizationFactor(v float64) (float64, int) { count := 0 scale := -3 if v > 1000.0 { for v > 1000.0 { v *= 1e-3 count++ } } else { for v < 1.0 { v *= 1e3 count++ } scale = 3 } return math.Pow10(count * scale), count * scale } func getExponent(p float64) int { count := 0 for p > 1.0 { p = p / 1000.0 count++ } return count * 3 } func newPrefixFromFactor(op ccunits.Prefix, e int) ccunits.Prefix { f := float64(op) exp := math.Pow10(getExponent(f) - e) return ccunits.Prefix(exp) } func Normalize(avg float64, p string) (float64, string) { f, e := getNormalizationFactor(avg) if e != 0 { np := newPrefixFromFactor(ccunits.NewPrefix(p), e) return f, np.Prefix() } return f, p }