确定二进制数字
Determine binary digits
本文关键字:二进制数字 更新时间:2023-10-16
我有很多类型为double的系数,这些系数应该作为带符号的16位数字存储在FPGA上。为此,我需要配置16位中有多少位应该用于分数,有多少位用于整数部分。因此,我的想法是,我用系数搜索数组,取其整数部分,计算需要多少比特来表示它。我这样做,直到得到最大的系数。
这是我到目前为止的代码:
double value;
int value_intpart;
double value_array[] = {0.33333333333333333, 0.67676767676767676, -0.67676767676767777, 1.1111111111111111, 2.3654375346357653, -2.3658375346397653, 10.365437534635765};
for(int counter = 0; counter < 7; counter++)
{
value = value_array[counter];
value_intpart = floor(abs(value) + 1);
std::cout << "Value: " << value << std::endl;
if(abs(value) > max_coeff)
{
if(value >= -0.5 && value < 0.5)
bits = 0;
else
{
bits = ceil( log(value_intpart)/log(2) + 1 );
std::cout << "Value_intpart: " << value_intpart << " Log2: " << log(value_intpart)/log(2) << std::endl;
}
std::cout << "Bits: " << bits << std::endl;
max_coeff = value;
}
}
它给我以下输出:
Value: 0.333333
Bits: 0
Value: 0.676768
Value_intpart: 1 Log2: 0
Bits: 1
Value: -0.676768
Value_intpart: 1 Log2: 0
Bits: 1
Value: 1.11111
Value_intpart: 2 Log2: 1
Bits: 2
Value: 2.36544
Value_intpart: 3 Log2: 1.58496
Bits: 3
Value: -2.36584
Value_intpart: 3 Log2: 1.58496
Bits: 3
Value: 10.3654
Value_intpart: 11 Log2: 3.45943
Bits: 5
但我真的不确定该代码的有效性,也不确定它是否完全正确。例如,我没有找到其他方法来手动检查从-0.5到0.5的区域(没有0.5)。你能给我一些代码的反馈吗?
#include <algorithm> // std::max
#include <iostream>
#include <iomanip>
#include <math.h> // frexp
#include <utility> // std::begin, std::end
using namespace std;
auto exponent_of( const double x )
-> int
{
int result;
frexp( x, &result );
return result;
}
auto main() -> int
{
const double values[] =
{
+0.33333333333333333,
+0.67676767676767676,
-0.67676767676767777,
+1.1111111111111111,
+2.3654375346357653,
-2.3658375346397653,
+10.365437534635765
};
int max_exponent = 0;
cout << fixed << setprecision( 8 );
for( const double x : values )
{
const int exponent = exponent_of( x );
cout << setw( 12 ) << x << setw( 4 ) << exponent << endl;
max_exponent = max( max_exponent, exponent );
}
cout << "Max binary exponent = " << max_exponent << endl;
}
输出:
0.33333333-1零点六七六七六七六八零-0.67676768 0一点一一一一一一一一一二点三六五四三七五三二-2.36583753 2十点三六五四三七五三四最大二进制指数=4
这意味着您需要4个二进制数字来表示具有最大绝对值的数字的整数部分。
int_bits = 0;
val = 0;
for(i=0;i<array_length;++i){
val = ceil(log(abs(array[i]))/log(2)) + 1;
if(val > int_bits){
int_bits = val;
}
}
+1用于说明符号位,该符号位通过abs函数丢失
相关文章:
- 以十为基数的数字到布尔数组,该数组要求二进制/基数为 2 的数字
- 尝试将数字写入二进制文件时引发异常
- 如何将uint8_t的二进制表示形式读取为数字
- 错误含义;以二进制形式打印数字
- 将非数字字符串存储为二进制整数
- Rcpp - 用二进制函数转换数字向量?
- 如何在C 中分析二进制数字
- 编写二进制数字时出乎意料的结果[C ]
- 如何在包含数字的.bmp(二进制图像)中执行组件标记9 4 3 6
- C/C++ 方法中最快/最短计算二进制数字总和/又名二进制中的 1 数
- 分开二进制数字的数字
- 如何使用C 将二进制数字的字符串转换为其签名的十进制表示
- 如何在没有循环的二进制数字表示中只计算1位
- 在二进制数字中找到第一个位
- 在C 中添加二进制数字
- 确定二进制数字
- 有没有一种方法可以将表示为字符串的数字转换为等效的二进制数字
- 找出一个特定整数有多少个二进制数字
- 将整数更改为二进制数字字符串
- 修改我的代码中两个二进制数字的加法