Turbo Pascal 和 Turbo C 中的分析计算

标签 profiling turbo-c turbo-pascal

我最近在为大学做一些任务,其中包括使用 Turbo Profiler(不幸的是,该软件在任务中隐式声明)来分析 Simpsons 数值积分的 C 和 Pascal 实现。我遇到了一个非常奇怪的案例,怀疑 Pascal 比 C 快得多。

帕斯卡:

i: integer, lower: real, delta_x: real;
....
(0.0000 seconds) (30 times)         x:=lower+delta_x*(2.0*i-1.0);

C:

long i, double lower, double delta_x;
....
(0.0549 seconds) (30 times)         double x = lower + delta_x * (2.0 * i - 1.0);

那么,realdouble(以及 integerlong)之间的区别是什么?或者只是 Pascal 的编译器更擅长处理数学运算?

最佳答案

Pascal 的 REAL 类似于 C 中的 FLOAT,是给定系统上最快的浮点类型的别名。

所以这两个片段是不等价的,在 Pascal 中使用最优化的类型,而在 C 中你硬编码 double,最高精度的类型(如果我们忘记 80 位 float )

在 TP 中,真正的默认值意味着 48 位 软 float ,但在许多后来的程序中添加了 {$N+},将其映射到 x87 double。

我不太了解 Turbo C,但可能是你的(64 位)double 类型被模拟(取决于设置),这可以解释性能下降,因为显然是模拟浮点值更重要的数字更慢。或者更糟的是,您在某处对硬件 FPU 与软件进行基准测试。

关于Turbo Pascal 和 Turbo C 中的分析计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36011265/

相关文章:

c - 如何在 Turbo C 中以十六进制格式存储和打印十六位数字?

windows - 什么会导致应用程序和系统变慢?

c - 如何修改 C 程序以便 gprof 可以分析它?

c - C 中的 textcolor() 和 textbackground()

algorithm - Yahtzee 3 的一种

performance - 检查括号顺序是否有效

libraries - Turbo Pascal 7 Unit 文件 - 反编译/列出内容?

c - Valgrind 消息 : invalid file descriptor 1024 in syscall close()

linux - 在ubuntu中监视正在运行的程序的指令?

linker - 使用 Turbo C 编译并链接到 .com 文件