为什么在 Modelica 中时间是实数而不是整数

Why is time a Real and not an Integer in Modelica

Modelica 将时间定义为真实时间 (sec 3.6.7)

input Real time (final quantity = "Time",
                 final unit     = "s"); 

在求解器中,当使用从 Modelica 文本解析的时间进行比较操作时,必须考虑容差,这会使比较速度变慢(理论上有些不精确)。尽管可以在适当的情况下手动将解析的时间值转换为整数,但这需要额外的处理时间。

将时间表示为实数而不是整数的原因是什么(例如,默认情况下 unit = "ns")?


给出问题来源的观点:

未指定 ISO C 标准的时间类型。然而,在 Posix 兼容系统的实现中,时间是一个整数:

较早的 ISO C 标准将 time_t 定义为算术类型 (sec 7.32.1), so it can be either a real-floating or integer. In C11, time_t is defined as real type (sec 7.27.1), while POSIX requires time_t to be an integer type.

例如在 gcc Debian 4.9.2-10 中 time_t 是一个整数:

typedef long int __time_t;
typedef __time_t time_t;

时间是实数的主要原因是我们经常需要在模型中区分它,例如如果您有 Real position=0.14*time; 并且想要区分它以计算例如Real velocity=der(position);。 (显然,时间的功能往往更复杂。)为此,我们需要时间是连续的——因此是真实的。

第二个原因是 Modelica 中的时间尺度非常不同,有时使用纳秒,但例如建筑模拟可能模拟了多年的时间。

然而,有 "integer" 时间更容易 post 处理可能是未来的扩展(在语言或工具中),并且似乎与时钟子系统可以的同步部分有关使用纳秒刻度(或毫秒、天或周)。

(顺便说一句:从技术上讲,整数没有单位属性,但这是一个小问题。)