gpt4 book ai didi

ada - 在定点声明中使用 gnat 出现奇怪的编译错误

转载 作者:行者123 更新时间:2023-12-04 22:54:20 27 4
gpt4 key购买 nike

编译失败并显示以下 F6 声明:

type F3 is delta 2.0**(-4) range 0.0 .. ((2.0**8)-1.0)*2.0**(-4);    -- byte  16#f.f#;
for f3'size use 8;

type F4 is delta 2.0**(-8) range 0.0 .. ((2.0**16)-1.0)*2.0**(-8); -- word 16#ff.ff#
for f4'size use 16;

type F5 is delta 2.0**(-16) range 0.0 .. ((2.0**32)-1.0)*2.0**(-16); -- dword 16#ffff.ffff#
for f5'size use 32;

type F6 is delta 2.0**(-32) range 0.0 .. ((2.0**64)-1.0)*2.0**(-32); -- ldword 16#ffff_ffff.ffff_ffff#
for f6'size use 32;

在 linux64/v8.0.3 和 learn.adacore.com 上同样失败。

编辑错误消息是“类型“f6”所需的大小 (65) 太大,允许的最大值为 64”

编辑添加'尺寸说明/十六进制的预期上限

编辑下面添加的固定类型卡住跟踪
loval -16#0.FF#E1, hival 16#0.FF#E1, Actual_Size  9
loval 0.0, hival 16#0.FF#E1, Actual_Size 8

loval -16#0.FFFF#E2, hival 16#0.FFFF#E2, Actual_Size 17
loval 0.0, hival 16#0.FFFF#E2, Actual_Size 16

loval -16#0.FFFF_FFFF#E4, hival 16#0.FFFF_FFFF#E4, Actual_Size 33
loval 0.0, hival 16#0.FFFF_FFFF#E4, Actual_Size 32

loval -16#0.FFFF_FFFF_FFFF_FFFF#E8, hival 16#0.FFFF_FFFF_FFFF_FFFF#E8, Actual_Size 64
loval 0.0, hival 16#0.FFFF_FFFF_FFFF_FFFF#E8, Actual_Size 63

最佳答案

基本问题是您的 GNAT 不支持大小超过 64 位的定点类型,如错误消息所述。和 F6似乎需要 65 位。这是因为对于定点类型,reference manual states :

The base range (see 3.5) of a fixed point type is symmetric around zero, except possibly for an extra negative value in some implementations.



这意味着类型 F6 的基本范围还包括对称负数,因此需要一个符号位。这就是为什么基本范围的表示需要 65 位而不是您期望的 64 位。

现在手册还指出

An ordinary_fixed_point_definition also defines a constrained first subtype of the type



所以 F6是需要 65 位的基本类型的子类型。由于 F6 的范围限制,它只需要 64 位表示。如 F6是第一个子类型,我们可以用 attribute definition clause 限制它的大小:
for F6'Size use 64;

这迫使编译器尝试仅使用 64 位进行表示。我不确定这是否能解决您的问题;可能是您无法通过这种方式规避错误,因为编译器需要一个可表示的基类型。

关于ada - 在定点声明中使用 gnat 出现奇怪的编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59207008/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com