2013-08-20 332 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;