SP[color=#808030; ]-[/color]Forth [color=#008c00; ]4[/color] Build [color=#008c00; ]8[/color] [color=#008c00; ]3.[/color]7сек O'Caml [color=#008c00; ]3.07[/color] [color=#008c00; ]4.3[/color] C[color=#808030; ]+[/color][color=#808030; ]+[/color] [color=#808030; ]([/color]VC7[color=#808030; ])[/color] [color=#008c00; ]4.5[/color] C# [color=#008c00; ]5.2[/color] Java2 [color=#008c00; ]1.4[/color][color=#008c00; ].1[/color] [color=#008c00; ]5.4[/color] F# [color=#008c00; ]0.6[/color][color=#008c00; ].4[/color][color=#008c00; ].1[/color] [color=#008c00; ]5.[/color]5сек Haskell [color=#808030; ]([/color]ghc5[color=#008c00; ].02[/color][color=#008c00; ].3[/color][color=#808030; ])[/color] 1мин 29сек для честного рекрсивного или [color=#008c00; ]0.[/color]04сек для [color=#0000e6; ]"нечестного"[/color] приёма |
fibz [color=#808030; ]=[/color] [color=#008c00; ]1[/color] [color=#808030; ]:[/color] [color=#008c00; ]1[/color] [color=#808030; ]:[/color] [color=#808030; ][[/color] x[color=#808030; ]+[/color]y [color=#808030; ]|[/color] [color=#808030; ]([/color]x[color=#008c00; ],[/color]y[color=#808030; ])[/color] [color=#808030; ] |
open System [color=#808030; ]let[/color] rec fib n [color=#808030; ]=[/color] if n[color=#808030; ]then [color=#008c00; ]1[/color] else fib[color=#808030; ]([/color]n[color=#808030; ]-[/color][color=#008c00; ]1[/color][color=#808030; ])[/color] [color=#808030; ]+[/color] fib[color=#808030; ]([/color]n[color=#808030; ]-[/color][color=#008c00; ]2[/color][color=#808030; ])[/color][color=#808030; ];[/color][color=#808030; ];[/color] [color=#808030; ]let[/color] [color=#808030; ]_[/color] [color=#808030; ]=[/color] Console[color=#008c00; ].[/color]WriteLine[color=#808030; ]([/color]fib[color=#808030; ]([/color][color=#008c00; ]40[/color][color=#808030; ])[/color][color=#808030; ])[/color][color=#808030; ];[/color] |
Balancer, 19.01.2004 15:11:04:Resurrector, 19.01.2004 16:58:12 :Гм, результат выдаёт, а вот время - нет.
А зачем? У меня в FAR Manager'е всюду стоит timer-плагин.
Пишешь в командной строке timer: команда - он показывает время её выполнения
Resurrector, 19.01.2004 17:25:16:Очень и очень грубо. Тем более, что exe-шник весит полмеги. <_> Какая-нибудь возможность связи с Win32 API?
Resurrector, 19.01.2004 17:44:15:Не-а, не подходит. Хотя-бы связь с dll?
Balancer, 20.01.2004 00:01:12 :При чём тут микроконтроллеры? На XT стоял 8051-й таймер. Начиная с чипсетов он шёл уже встроенный, но всегда - отдельным встроенным модулем. Процессор на XT тактировался от кварца на 14.31818МГц. Частота с кварца делилась на 12 и подавалась на вход таймера. Там он на XT делился на максимальный коэффициент 65536 и в таком виде использовался.
Программно коэффициент можно уменьшать, но это ведёт к двум неприятным вещам. Нарушается синхронизация всего, что работает от таймера (обычно - операционка, на играх, порой, на это забивали) и растут накладные расходы на обработку прерываний таймера. Одно дело - обработать его 18 раз в секунду, другое - 10000 раз. Напомню, что прерывания и на сегодня очень ресурсоёмкая вещь. Переведи винт в режим PIO и сравни скорость системы с DMA
Вот потому и интересно. Судя по тому, что DOS на современных машинах работает как и раньше, для винды в новых чипсетах или новый таймер поставили, при чём "умный", не дёргающий систему прерываниями, а сам считающий время (CMOS RTC расширили?) или же система, всё же, стандартный перепрограммирует, а для софта старые параметры таймера эмулирует?
К сожалению, я зыбал уже команды замены коэффициента деления, чтобы с debug'ом вручную с таймером сейчас поиграть
Balancer, 20.01.2004 01:01:12:К сожалению, я зыбал уже команды замены коэффициента деления, чтобы с debug'ом вручную с таймером сейчас поиграть
Zeus, 29.01.2004 07:54:39:Почему обескураживающий? Этого и следовало ожидать
Там и надо то, что другое значение инициализации в PIT загнать.Упустил я как-то - за счёт чего в виндах системный таймер разогнан до частоты выше стандартных 14.31818/12/65536 МГц = 18.2Гц? (как раз 0.055 сек на такт). Т.е. нынче в железе стоит отдельный таймер, или стандартный разогнан, а для старых приложений эмулируется?
8051 - это микроконтроллер. PIT(программируемый интервальный таймер) - это 8253.На XT стоял 8051-й таймер
PIT - это одно, а RTC - это другое.Судя по тому, что DOS на современных машинах работает как и раньше, для винды в новых чипсетах или новый таймер поставили, при чём "умный", не дёргающий систему прерываниями, а сам считающий время (CMOS RTC расширили?)
Под Win9x вроде 1.19 МГц, под WinNT - вроде в 4 раза больше(4.77 МГц)Сигнал на 1.19 МГц как был, так и есть. Но! На Р4/i850 (по крайней мере) его, вроде бы, увеличили где-то до 4 Мгц. Сейчас нет под рукой Р4, чтобы проверить, но почти уверен
Zeus, 20.01.2004 08:57:56:4. Как это реализуется - без понятия. Но есть еще одно наблюдение. Самый обычный таймер в виндовсе, по которому многие и ориентируются, т.е. получаемый по GetTickCount и который считает якобы милисекунды, приводится в основном от того же 18.2 Гц таймера. "В основном" - потому что он использует всякое внешнее событие для обновления, например, движение мыши или нажатие на клавиатуру. Но если ничего не происходит, обновляться он будет лишь с частотой 18.2 Гц. Впрочем, в милисекунды он пересчитывает правильно. На этот таймер нередко вешают всякие события, условия завершения потоков и т.п., что порой оканчивается плачевно, если нужна хоть мало-мальская точность...
#include [color=#0000e6; ]"stdafx.h"[/color] #include [color=#808030; ]<[/color]windows[color=#008c00; ].[/color]h[color=#808030; ]>[/color] int main[color=#808030; ]([/color]int argc[color=#808030; ],[/color] char[color=#808030; ]*[/color] argv[color=#808030; ][[/color][color=#808030; ]][/color][color=#808030; ])[/color] [color=#808030; ]{[/color] for[color=#808030; ]([/color]long i[color=#808030; ]=[/color][color=#008c00; ]0[/color][color=#808030; ];[/color] i[color=#808030; ]<[/color][color=#008c00; ]100[/color][color=#808030; ];[/color] i[color=#808030; ]+[/color][color=#808030; ]+[/color][color=#808030; ])[/color] [color=#808030; ]{[/color] printf[color=#808030; ]([/color][color=#0000e6; ]"%d\n"[/color][color=#808030; ],[/color] GetTickCount[color=#808030; ]([/color][color=#808030; ])[/color][color=#808030; ])[/color][color=#808030; ];[/color] Sleep[color=#808030; ]([/color][color=#008c00; ]1[/color][color=#808030; ])[/color][color=#808030; ];[/color] [color=#808030; ]}[/color] return [color=#008c00; ]0[/color][color=#808030; ];[/color] [color=#808030; ]}[/color] |
Balancer, 15.02.2004 02:14:14:main.cpp(1) : fatal error C1083: Cannot open include file: 'stdafx.h': No such file or directory
trainer, 15.02.2004 13:45:18:Его надо выкинуть, а добавить еще stdio.h
[color=#008c00; ]235910401[/color] [color=#008c00; ]235910401[/color] [color=#008c00; ]235910401[/color] [color=#008c00; ]235910401[/color] [color=#008c00; ]235910401[/color] [color=#008c00; ]235910401[/color] [color=#008c00; ]235910401[/color] [color=#008c00; ]235910401[/color] [color=#008c00; ]235910401[/color] [color=#008c00; ]235910401[/color] [color=#008c00; ]235910411[/color] [color=#008c00; ]235910411[/color] [color=#008c00; ]235910411[/color] [color=#008c00; ]235910411[/color] [color=#008c00; ]235910411[/color] [color=#008c00; ]235910411[/color] [color=#008c00; ]235910411[/color] [color=#008c00; ]235910411[/color] [color=#008c00; ]235910411[/color] [color=#008c00; ]235910411[/color] [color=#008c00; ]235910421[/color] [color=#008c00; ]235910421[/color] [color=#008c00; ]235910421[/color] [color=#008c00; ]235910421[/color] [color=#008c00; ]235910421[/color] [color=#008c00; ]235910421[/color] [color=#008c00; ]235910421[/color] [color=#008c00; ]235910421[/color] [color=#008c00; ]235910421[/color] [color=#008c00; ]235910421[/color] [color=#008c00; ]235910431[/color] [color=#008c00; ]235910431[/color] [color=#008c00; ]235910431[/color] [color=#008c00; ]235910431[/color] [color=#008c00; ]235910431[/color] [color=#008c00; ]235910431[/color] [color=#008c00; ]235910431[/color] [color=#008c00; ]235910431[/color] [color=#008c00; ]235910431[/color] [color=#008c00; ]235910431[/color] [color=#008c00; ]235910441[/color] [color=#808030; ].[/color][color=#808030; ].[/color][color=#808030; ].[/color] |
Здравствуйте, гость!
Гостевой функционал сайта ограничен. Для полноценной работы зарегистрируйтесь, пожалуйста.