2013-08-20 324 views
0

给定64位表示IEEE 754双精度格式的数字,将它们转换为32位表示相同数字的算法是什么,但采用IEEE 754单精度格式(可能丢失精确)?从双精度转换为单精度

此外,有没有一种简单的方法可以在Ada中执行这种转换,而无需操纵位?

+0

这个问题包含算法,可将双的描述精确数量到单精度:http://stackoverflow.com/questions/16737615/how-is-actually-done-floating-point-conversion-double-to-float-or-float-to-doub/ –

回答

6

确实是有一个简单的方法在阿达做到这一点(很相似,你会做在C同样的事情的方式!):

with Ada.Numerics; 
with Ada.Text_IO; use Ada.Text_IO; 
procedure Floating_Conversion is 
    D : constant Long_Float := Ada.Numerics.Pi; 
    F : Float; 
begin 
    F := Float (D);         -- The conversion! 
    Put_Line ("double:" & Long_Float'Image (D)); 
    Put_Line ("single:" & Float'Image (F)); 
end Floating_Conversion;