2016-03-15 3 views
1

Я недавно занимался некоторыми задачами для университета, в том числе с использованием Turbo Profiler (программное обеспечение неявно объявлено в задаче, к сожалению) для профилирования C и Pascal реализации численной интеграции Simpsons. Я наткнулся на очень странный случай, когда Паскаль подозрительно гораздо быстрее, чем C.Профилирование вычислений в Turbo Pascal и Turbo 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); 

Итак, что это может быть, разница между real и doubleinteger и long) или просто компилятор Pascal лучше при обработке математических операций?

ответ

0

Don't believe those numbers. Если вы хотите измерить время, поместите петлю 10^6 или 10^9 итераций вокруг верхней подпрограммы и считайте секунды. Если вы хотите увидеть, какая часть времени входит в этот оператор, используйте стек-выборку.

1

РЕАЛЬНОГО Паскаль Паскаль, как FLOAT в C, псевдоним для самого быстрого плавающего типа точки на данной системе.

Так как фрагменты не эквивалентны, в Pascal используется наиболее оптимальный тип, и в C вы жёстко двойными, самый высокий тип точности (если забыть 80-битные поплавки)

В TP реальная умолчанию означает 48-битная мягкая плавающая точка, но во многих последующих программах добавляется {$ N +}, которая сопоставляет ее на x87 double.

Я не знаю, что такое Turbo C, но может быть, что ваш (64-разрядный) двойной тип эмулируется (в зависимости от настроек), что объясняет ухудшение производительности, поскольку, очевидно, эмуляция значения с плавающей запятой с более значительными цифрами медленнее. Или, что еще хуже, вы сравниваете аппаратное обеспечение FPU с программным обеспечением где-то.

Смежные вопросы