从双重转换为单一

use*_*776 0 floating-point double bits ada ieee-754

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

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

Sim*_*ght 6

确实有一种简单的方法可以在Ada中执行此操作(非常类似于在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;
Run Code Online (Sandbox Code Playgroud)