我想将很多浮点数转换为多精度FPU,例如' 0x4049000000 .....',执行计算,更改精度然后再执行计算等等......
我知道理论为here,但我想要一个软件,在线工具或Matlab解决方案,将6000+数字转换为FPU格式(如IEEE单精度),范围为0.0~51.0。
任何建议?
注意:我需要自定义精度,我可以用它来描述尾数和指数的位数。
第二次编辑:IEEE single precision convert和IEEE double Precision convert就是例子。您输入任何浮点数,例如3.1454,您将获得二进制/十六进制的IEEE(单精度或双精度)浮点值。 @rick
答案 0 :(得分:1)
快速浏览一下VHDL-2008浮点库float_pkg
,可以看出它实例化了一个泛型包,其泛型参数设置为匹配IEEE单精度浮点数。
package float_pkg is new IEEE.float_generic_pkg (...)
您应该在模拟器安装过程中找到此库,无论您何时寻找标准库,例如numeric_std
。在我的系统上,它位于/opt/ghdl-0.32/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/vhdl/src/ieee2008/float_pkg.vhdl
- 如果您无法在系统上找到它,它可以在线获取,搜索" VHDL 2008浮动包"应该让你到那儿。
您可以为您喜欢的任何精度(在合理范围内)实例化此通用包(使用float_pkg
作为示例)。
快速查看IEEE.float_generic_pkg
表明它声明了函数to_float
和to_real
,我认为它们有明显的行为。
所以答案是......是的。
-- real to float
function to_float (
arg : REAL;
size_res : UNRESOLVED_float;
constant round_style : round_type := float_round_style; -- rounding option
constant denormalize : BOOLEAN := float_denormalize) -- Use IEEE extended FP
return UNRESOLVED_float;
和
-- float to real
function to_real (
arg : UNRESOLVED_float; -- floating point input
constant check_error : BOOLEAN := float_check_error; -- check for errors
constant denormalize : BOOLEAN := float_denormalize) -- Use IEEE extended FP
return REAL;
答案 1 :(得分:1)
float_pkg
。它为您提供了一些预定义的浮点类型(例如,IEEE单精度和双精度),以及为分数和指数定义任意位数的自定义浮点值的能力。
根据您的数字示例,这里有一些代码可以从real
值转换为单精度,双精度和四倍精度浮点数。
library ieee;
use ieee.float_pkg.all;
entity floating_point_demo is
end;
architecture example of floating_point_demo is
begin
process
variable real_input_value: real := 49.0215463456;
variable single_precision_float: float32;
variable double_precision_float: float64;
variable quadruple_precision_float: float128;
begin
single_precision_float := to_float(real_input_value, single_precision_float);
report to_string(single_precision_float);
report to_hstring(single_precision_float);
double_precision_float := to_float(real_input_value, double_precision_float);
report to_string(double_precision_float);
report to_hstring(double_precision_float);
quadruple_precision_float := to_float(real_input_value, quadruple_precision_float);
report to_string(quadruple_precision_float);
report to_hstring(quadruple_precision_float);
wait;
end process;
end;
上面的示例使用float32
中的float64
,float128
和float_pkg
类型。但是,您可以使用float
类型的对象实现相同的效果,其大小可以在其声明中定义:
variable single_precision_float: float(8 downto -23);
variable double_precision_float: float(11 downto -52);
variable quadruple_precision_float: float(15 downto -112);
要从float
转换为real
值,您可以使用to_real()
函数:
-- To print the real value of a float object:
report to_string(to_real(quadruple_precision_float));
-- To convert from a float and assign to a real:
real_value := to_real(quadruple_precision_float);