value = i * 2^position/scale 可以参考代码,
int critical_value = std::pow(2, 7) - 1;
if (data_type == DT_INT8) {
critical_value = std::pow(2, 7) - 1;
} else if (data_type == DT_INT16) {
critical_value = std::pow(2, 15) - 1;
}
BlobDataType blob_dtype;
for (int i = 0; i < abs_max.size(); i++) {
if (abs_max[i] == 0) {
position[i] = 0;
scale[i] = 1;
} else {
position[i] = log2(abs_max[i] / critical_value);
position[i] += position[i] > 0 ? 1 : 0;
scale[i] = critical_value * pow(2, static_cast<int>(position[i])) / abs_max[i];
}
请登录后评论