Modelica将时间定义为真实(sec 3.6.7)
input Real time (final quantity = "Time",
final unit = "s");
Run Code Online (Sandbox Code Playgroud)
在求解器中,当使用从Modelica文本解析的时间进行比较操作时,必须考虑公差,这使得比较更慢(并且理论上有些不精确).虽然解析的时间值可以在适当的情况下手动转换为整数,但这涉及额外的处理时间.
将时间表示为Real而不是整数的原因是什么(例如unit = "ns"默认情况下)?
提供问题来自的观点:
未指定ISO C标准的时间类型.但是,对于符合Posix的系统的实现,时间是一个整数:
较旧的ISO C标准定义time_t为算术类型(sec 7.32.1),因此它可以是实数浮点数或整数.在C11中,time_t定义为实数类型(sec 7.27.1),而POSIX需要time_t 是整数类型.
例如在gcc中,Debian 4.9.2-10 time_t是一个整数:
typedef long int __time_t;
typedef __time_t time_t;
Run Code Online (Sandbox Code Playgroud)
时间是真实的主要原因是因为我们经常需要在模型中区分它,例如,如果你有Real position=0.14*time;并且想要区分它来计算,例如Real velocity=der(position);.(显然,时间的功能往往更加复杂.)为此,我们需要时间连续 - 因而是真实的.
次要原因是Modelica中存在完全不同的时间尺度,有时使用纳秒,但例如建筑物模拟可能模拟了多年的时间.
但是,具有"整数"时间以便于后处理可能是未来的扩展(在语言或工具中),并且似乎与同步部分有关,其中Clocked子系统可以使用纳秒秒(或毫秒,或几天或几周).
(顺便说一句:技术上整数没有单位属性,但这是一个小问题.)