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

Roi*_*ton 2 modelica

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)

Han*_*son 6

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

次要原因是Modelica中存在完全不同的时间尺度,有时使用纳秒,但例如建筑物模拟可能模拟了多年的时间.

但是,具有"整数"时间以便于后处理可能是未来的扩展(在语言或工具中),并且似乎与同步部分有关,其中Clocked子系统可以使用纳秒秒(或毫秒,或几天或几周).

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

  • 谢谢你的澄清!关于时间尺度:为了能够访问不同的大小,C使用一个单独的容器,称为故障时间`struct tm`,它包含秒,分钟等的整数.对于间隔,`struct timespec`包含秒作为`time_t`( = Posix中的整数类型)和纳秒为整数类型. (2认同)