Функция арктангенса в точке ноль терпит разрыв, а значение в ней не существует. atan2 — Это арктангенс, дополненный предельными значениями слева (для -0) и справа (для +0). Соответственно в пределе слева и справа эта функция стремиться к разным значениям.
atan2 сделана для удобства, чтобы не делать лишних проверок в программе. С точки зрения математики и арифметики с плавающей запятой поведение ее абсолютно логично.
Кроме того, поскольку период тригонометрических функций Pi/2, то если вас не устраивают отрицательные углы, всегда можно сделать проверку
Сейчас, имхо, одному человеку написать с нуля полезную на практике ОС невозможно. Разве что для очень специфичной embedded-техники. И то, первым делом слоило бы рассмотреть возможность использовать готовое ядро какой-нибудь из *nix-систем. А уже поверх встроить что-нибудь интересное, например, поддержку real-time процессов или «хитрый» менеджер памяти.
Использовал Lighttpd+Python под Windows для централизованного репозитория Mercurial. Столкнулся с одной проблемой:
Поскольку в Windows имена файлов «case insensative», lighttpd приводит все имена скриптов, файлов и пути к lowercase. Из-за этого, Mercurial (написанный на Python и использующий виртуальные пути, типа http://localhost/hg/MyRepo), не смог видеть репозитории, содержащие заглавные буквы в названии. Никакие игры с настройками не помогли и пришлось качать исходники, править и компилировать.
Это было год назад, возможно сейчас этой проблемы нет, но все равно, при работе в Windows+Python будьте осторожны!
Кроме того, поиск синонимов и антонимов, предложений с разными употреблениями слов, определение слова в разных областях, прямое и переносное значение и прочее. При этом, знаешь, что словари составлены экспертами, а не стихийно, т.е. на них можно ссылаться при споре о терминологии.
Я как-то раз работал в проекте, в котором действительно не было спецификаций. И каждай раз уже после этапа программирования и отладки у заказкика всплывала «деталь», из-за которой многое приходилось переделывать.
Конечно, переписывать программы — неотъемлемая часть жизни программиста. Но спецификации позволяют все же повысить эффективность и качестко выходного продукта.
Спасибо за интересынй пример, думаю мы согласны в сути вопроса, а спорим о частностаях.
Статья очень понравилась стремлением автора к саморазвитию.
Мои рекомендации:
1. Посмотрите в сторону VBScript — хорошая альтернатива консольным пакетным программам (.bat) для винды.
2. (опционально) Посмотрите как устроена консоль в Unix-подобных системах, поймете недостатки виндовой консоли.
Простого ответа нет — есть целая теория как делать формулы более устойчивыми к арифметике с плавающей запятой, основанная на анализе погрешности и алгебре. Несколько примеров с доказательствами есть в этой книжке.
Все зависит от того, что мы с этими числами будем делать. Кроме округления при представлении источником ошибок являются арифметические операции, которые тоже вносят погрешность. Эффект получается кумулятивный.
Я консультировался с разработчиками стандартов в Украине. Оба перевода правильные, а в стандартах пишут через слеш (плавающая точка/запятая). Последний мне показался самобытнее и ближе к традиции.
atan2 сделана для удобства, чтобы не делать лишних проверок в программе. С точки зрения математики и арифметики с плавающей запятой поведение ее абсолютно логично.
Кроме того, поскольку период тригонометрических функций Pi/2, то если вас не устраивают отрицательные углы, всегда можно сделать проверку
angle=atan2(val);
if (angle<0) angle+=pi/2;
Это тоже будет корректно.
Поскольку в Windows имена файлов «case insensative», lighttpd приводит все имена скриптов, файлов и пути к lowercase. Из-за этого, Mercurial (написанный на Python и использующий виртуальные пути, типа http://localhost/hg/MyRepo), не смог видеть репозитории, содержащие заглавные буквы в названии. Никакие игры с настройками не помогли и пришлось качать исходники, править и компилировать.
Это было год назад, возможно сейчас этой проблемы нет, но все равно, при работе в Windows+Python будьте осторожны!
Конечно, переписывать программы — неотъемлемая часть жизни программиста. Но спецификации позволяют все же повысить эффективность и качестко выходного продукта.
Спасибо за интересынй пример, думаю мы согласны в сути вопроса, а спорим о частностаях.
Мои рекомендации:
1. Посмотрите в сторону VBScript — хорошая альтернатива консольным пакетным программам (.bat) для винды.
2. (опционально) Посмотрите как устроена консоль в Unix-подобных системах, поймете недостатки виндовой консоли.