64 битный конь, который умеет считать


Главный вождь племени Абба не умеет считать

почемуто говорят что неправельно сделал
Где ошибка и что не так.

Добавлено через 4 минуты
вот условие
Главный вождь племени Абба не умеет считать. В обмен на одну из его земель вождь другого племени предложил ему выбрать одну из трех куч с золотыми монетами. Но вождю племени Абба хочется получить наибольшее количество золотых монет. Помогите вождю сделать правильный выбор!
Входные данные

В первой строке входного файла INPUT.TXT записаны три натуральных числа через пробел. Каждое из чисел не превышает 10100.
Выходные данные

В выходной файл OUTPUT.TXT нужно вывести одно целое число — максимальное количество монет, которые может взять вождь.

04.10.2009, 11:34

Оптимизация программы «Золото племени АББА»
Помогите оптимизировать, если что задача: (Ссылка на сторонний ресурс удалена) (Время: 1 сек.

Золото племени АББА
Добрый день! Я пытался решить довольно-таки простенькую задачку «Золото племени АББА». Проблема.

Задача Золото племени АББА
Почему-то у меня не проходит по одному из тестов решение для следующей задачи: Решение.

Умеет ли считать mysqli_query ?
К примеру есть таблица, где: Дата | ip | shots 2020 | 01 | 5 2020 | 01 | 5 2020 | 02 | 4.

Почему курица умеет считать только до 3 ?
всем привет, задали такое задание по ТИТиСу (теория инф. систем): объяснить почему курица может.

64-битный конь, который умеет считать

Published on
05-Jul-2015


  • 1. 64- , : : 11.05.2009 Visual C++ 64- . » «, , 1911 [1]. , , . , . , , . ! ? . , , , . , — , , «». , — . , , . . , , . 21- 64- , , . .1. , 64-. : http://www.viva64.com/ru/articles/64-bit-development. , » » » «, «» [2, 3, 4]. , , . — int. , . , . int 64- , , 0..INT_MAX.

2. , «». , , , . , debug-, «» release-. , debug, . , debug- . , release-, . , . , , (-, , ). , Viva64. , , — , . .2. — JMP ?- . Visual C++ 2005 PortSample. , Viva64 , Viva64. , 32- 64- . , release . , 64- — ! . «volatile», PortSample. Visual C++ 2008. , Visual C++ 2005, Visual C++ 2008. . , , , . . , , . , , . , release- .3. , , : , . . . , 4. 4, 8. 3. , , . 32768 , 16- . , , , . , release , :int index = 0;size_t arraySize = . ;for (size_t i = 0; i != arraySize; i++)array[index++] = BYTE(i); , INT_MAX. , index int. — . :0000000140001040 mov byte ptr [rcx+rax],cl0000000140001043 add rcx,10000000140001047 cmp rcx,rbx000000014000104A jne wmain+40h (140001040h) , 64- . :int index = 0;for (size_t i = 0; i != arraySize; i++) , . , . — . :0000000140001040 movsxdrcx,r8d0000000140001043 mov byte ptr [rcx+rbx],r8b0000000140001047 add r8d,1000000014000104B sub rax,1 4. 000000014000104F jne wmain+40h (140001040h) , . r8d = 0x80000000 rcx 0xffffffff80000000. — . . :unsigned index = 0;for (size_t i = 0; i != arraySize; ++i) > :0000000140001040 mov byte ptr [rdx],10000000140001043 add rdx,10000000140001047 cmp byte ptr [rcx+rax],1000000014000104B jne wmain+58h (140001058h)000000014000104D add rcx,10000000140001051 cmp rcx,rdi0000000140001054 jne wmain+40h (140001040h) 64- rdx index. UINT_MAX. . :volatile unsigned volatileVar = 1;. unsigned index = 0;for (size_t i = 0; i != arraySize; ++i) > index++ «index += volatileVar;» , 32- , — :0000000140001040movecx,r8d0000000140001043addr8d,dword ptr [volatileVar (140003020h)]000000014000104Amovbyte ptr [rcx+rax],1000000014000104Ecmpbyte ptr [rdx+rax],10000000140001052jnewmain+5Fh (14000105Fh)0000000140001054addrdx,10000000140001058cmprdx,rdi000000014000105Bjnewmain+40h (140001040h) , . , , . , .ptrdiff_t UnsafeCalcIndex(int x, int y, int w . release-. UnsafeCalcIndex , 64- : 6. 0000000140001052testrsi,rsi0000000140001055jewmain+6Ch (14000106Ch)0000000140001057lea rcx,[r9+rax]000000014000105Bmov rdx,rsi000000014000105Exchgax,ax0000000140001060mov byte ptr [rcx],10000000140001063add rcx,rbx0000000140001066sub rdx,1000000014000106Ajne wmain+60h (140001060h)000000014000106Cadd r9,10000000140001070cmp r9,rbx0000000140001073jne wmain+52h (140001052h) — , UnsafeCalcIndex . , , , . () UnsafeCalcIndex. , :ptrdiff_t UnsafeCalcIndex(int x, int y, int w >

64 битный конь, который умеет считать

Близится 2014 год — год Лошади. Мы решили опубликовать ряд статей, посвященных лошадям. В этот раз поговорим о самых умных лошадях. Если оценивать ум лошади с точки зрения быстроты восприятия, то лошадь просто гениальна. За один раз лошадь способна воспроизвести в памяти множество ситуаций, особенно при наличии эмоционального контекста. Лошадь может выучить новые движения или действия за меньшее количество повторений, чем другие животные. Они хорошо рассуждают, особенно, когда дело касается их безопасности. У них также хорошо развито воображение.

Несмотря на все способности, у интеллекта лошадей есть определенные ограничения, и конечно, в сравнении с умом человека их можно считать глупыми. Лошади не способны, в отличие от нас, мыслить концептуально, и проявлять ум в решениях проблем.

Самая умная лошадь Умный Ганс

В истории встречались примеры поистине гениальных по уму лошадей: Умный Ганс, Магомет и Цариф – лошади, которые умели считать, писать и разговаривать.

В конце XIX века, когда вышла книга «Мыслящие животные» Карл Кралль, рассказывающая о мыслящих лошадях, мир очередной раз взорвался от удивительной, парадоксальной и пугающей новости. Мало того, что человек произошел от приматов, так, оказывается, еще и окружающие животные мало уступают интеллектом человеку!

Однажды, германский учитель математики Вильгельм фон Остен (Wilhelm von Osten), представил публике своего коня породы орловский рысак, по кличке Умный Ганс (Clever Hans). Он утверждал, что конь обладает интеллектом двенадцатилетнего человека. Многие сначала сочли это заявление как веселую шутку, или небольшую тронутость умом учителя, но конь на самом деле демонстрировал чудеса.

Лошадь Умный Ганс умел считать. На вопросы Умный Ганс отвечал ударами копытом по земле. Ганс легко он давал ответы такие вопросы, как, Сколько будет 12 + 12?, или, Если восьмой день месяца приходится на вторник, то каким днём по счёту будет следующая пятница?

Большие числа ему выстукивать было сложно, поэтому все манипуляции с цифрами ограничивались 30-ю. Кроме счёта, на вопросы, которые требовали ответов да или нет, Умный Ганс отвечал кивком или качанием головы. Вильгельм фон Остен продолжал обучение Ганса. Так, он заработал своеобразную азбуку Морзе, которую конь мог бы выстукивать. И, спустя 2 года, лошадь Умный Ганс заговорила! Глядя на особую таблицу с занумерованными буквами, он мог, стуча копытом, обозначать их, составлять слова и таким путем отвечать на заданные вопросы.

С каждым днем во двор Вильгельма фон Остена стекалось все больше и больше любопытных. Стали бывать здесь и не только простые посетители, но и высокопоставленные особы, министры. Газеты писали, что сам германский император Вильгельм II заинтересовался Умным Гансом и выразил желание посмотреть его. Вокруг Умного Ганса разворачиваются полемика и громкий газетный шум.


Что выяснила комиссия изучавшая самую умную лошадь

1904 году Вильгельма фон Остена собирает авторитетнейшую комиссию из 13-ти именитых специалистов, для того чтобы доказать что он не шарлатан. И учёным не удаётся обнаружить никакого обмана: Никакого мошенничества, никаких тайных сигналов в опытах нет. Вывод напрашивался сам собой — лошади, как и люди, обладают разумом. А это уже могло стать одним из величайших открытий.

Споры вокруг мыслящей лошади разгорелись с еще большей силой. Противники Остена отказались верить выводам комиссии, называя их легкомысленными и говорили, что состав комиссии был подобран при участии владельца лошади, потому комиссия и не могла дать объективного заключения.

Илон Маск рекомендует:  Как в Word из формата А4 сделать А5

Профессор психологии Оскар Пфунгст (Oskar Pfungst), присутствующий на первой комиссии произвел дополнительные исследования Умного Ганса. Он считал, что ответы дает не лошадь, а наблюдающие за ней люди, и особенно хозяин. Умный Ганс замечает непроизвольные реакции человека, проявляющиеся при решении задачи. Оскар Пфунгст стал исследовать движения, которые совершает человек, задающий Гансу вопросы.

Секрет интеллекта лошади Умный Ганс

Конь стучал копытом до тех пор, пока человек смотрел на его копыта. Как только человек заканчивал счет и смотрел на голову коня, тот немедленно прекращал стучать. Если же экспериментатор поднимал глаза раньше, то Умный Ганс ошибался. Так же конь обладал не только чрезвычайно острым зрением, но и слухом — от него внимания не ускользали малейшие изменения в дыхании окружающих людей. Стоило отгородить коня от людей даже простой простыней — лошадь мгновенно тупела, и врала на всех поставленных задачах. Убирали простыню — умнела вновь. Умный Ганс замечал едва заметную мимику, напряженность позы, и даже биение вены на шее экзаменатора. Если экспериментатор сам знал ответ, конь отвечает правильно в 98% случаев, если же ответ неизвестен самому задающему — правильными ответами были не более 10%.

Выводы второй комиссии глубоко огорчили Вильгельма фон Остена. Но особенно обиделся он на Умного Ганса, который, по его убеждению, заупрямился и не захотел показать перед учеными всех своих умственных способностей. Остен уехал из Берлина и даже намеревался покинуть Германию. Летом 1909 года он умер после долгой болезни на 71-м году жизни.

Новые успехи самой умной лошади Умного Ганса

После смерти первого хозяина Умного Ганса купил Карл Кралль проводивший с ним до этого много экспериментов и внесший в опыты ряд важных усовершенствований. В результате этих усовершенствований обучение лошади пошло еще быстрее. Умный Ганс научился различать различные запахи (скипидара, ванилина, мяты) и знал их названия. Ганс мог выбирать из меню, написанного на доске, предпочтительные лакомства, узнавал знакомых людей на портретах и «называл» их имена. Он различал монеты и игральные карты. Он хорошо знал такие понятия, как угол, сторона, прямая, параллельность, даже мог отличить прямой угол от острого и многое другое. Чтобы исключить подозрение в подаче каких-либо зрительных сигналов, Кралль стал надевать на голову коня шоры, которые не позволяли ему видеть экспериментатора, но давали возможность смотреть вперед на таблицу с буквами и цифрами.

Умный Ганс научился выполнять устные и даже письменные команды: Поверни голову налево, направо, вверх, вниз!, Сделай шаг вперед, назад!, Подними правую, левую ногу!, Подними ту ногу, которую поднял этот господин!, Встань на дыбы!, Закрой дверь!, Возьми палку!, Иди прямо на такого-то!, Раскланяйся!, Заржи!, Сдунь бумажку!, Стань параллельно скамье, под прямым углом к скамье! и так далее и тому подобное. Так же Ганс выучился отвечать на вопросы, не только выстукивая копытом, но и движениями головой, ржаньем. Кроме этого, он мог складывать слова и целые предложения, касаясь губами нужных букв, написанных на картонных кружках и расположенных на специальном стенде.

Ганс сменил нескольких владельцев, которые уже не были заинтересованы в демонстрации его способностей широкой публике. Есть сведения, что во время Первой мировой войны в 1916 году Ганс использовался на фронте в качестве тягловой лошади, но достоверных сведений об этом нет. Дальше его судьбе ничего не известно.

Умные лошади Магомет и Цариф

А Кралль приобрёл двух арабских жеребцов Магомета и Царифа для того чтобы доказать, что Умный Ганс не уникален, и все лошади обучаемы.


Своих новых учеников Кралль прежде всего стал обучать арифметике. Очень быстро обе лошади научились понимать числа 1 и 2 и отстукивали их правой передней ногой. Спустя некоторое время Магомет и Цариф знали все цифры первого десятка и ноль. Для обозначения ноля лошадь должна была повернуть голову направо. Очень скоро Магомет и Цариф могли считать до сотни, отбивая сначала правой ногой единицы, а затем левой — десятки. Кралль рассказывал в своей книге, что после команды отсчитать число 30 Магомет сам догадался первым делом повернуть голову направо, чтобы отметить ноль, а потом три раза ударил копытом (в соответствии с немецким языком, в котором первыми называются единицы, а затем уже десятки).

По словам Кралля, его ученики лошади не только умели считать сотнями и тысячами, не только помнили таблицу умножения, но и могли выполнять все арифметические действия. Например, на одном из уроков Магомет правильно решил задачу: 21 268: 3 = 7089 и 1 в остатке. Самое любопытное, что он при этом не забыл и про остаток, стукнув напоследок один раз правой ногой.

Лошадь Магомет научился выполнять арифметические действия с дробями, возводить числа в степень и извлекать квадратные корни. В январе 1910 года он извлекал корни третьей степени, а затем и четвертой. Поражало, что однажды Магомет сумел извлечь корень четвертой степени из числа 456 976 всего за десять секунд!

Способности Магомета к быстрым вычислениям были выше, чем у обыкновенного человека. Случалось, что Магомет ошибался, но если ему указывали на ошибку, он сразу же её исправлял.

Обе умные лошади преуспели и в грамоте. Они могли складывать из букв слова, из слов предложения. Кралль считал, что, в отличие от математика Магомета, Цариф был больше гуманитарием. Складывание слов и предложений Царифу давалось лучше и легче, чем решение арифметических задач.

Бывало, что лошади сами начинали выстукивать слова. Чаще всего они означали просьбы чего-нибудь вкусненького. В зашифрованном виде звучало: Сахар, Морковь, Хлеб. Утомленная занятиями лошадь могла попросить: В конюшню. Кралль утверждал, что Магомет нередко обращался к нему, выстукивая копытом слово Кралль.

Попытки научить животных считать предпринимались и позднее. Но эти опыты не идут ни в какое сравнение с умениями Крааллевских лошадей. После Кралля уже никто не смог добиться такого успеха.

Testing

Александр Шишенин

Петр Дюков

Немного специфично, но все же:

Списки доступа

  • Подписчики [634]
  • Белый список [6]
Права доступа

Доступ для остальных:

анонимы : могут читать
новые : могут читать
постоянные : полный доступ

Copyright © 2020 ООО «ДТФ.РУ». Все права защищены.

Воспроизведение материалов или их частей в любом виде и форме без письменного согласия запрещено.

Замечания и предложения отправляйте через форму обратной связи.

Лошади умеют считать

Последние исследования ученых доказали, что лошади умеют считать, и обладают гораздо большими способностями.

Исследователи из Университета Эссекса заметили, что лошади, когда им предлагалось на выбор две корзины, выбирали ту, в которой содержалось большее количество яблок. То же самое происходило и в том случае, когда подобный опыт проводили над лемурами и макаками-резусами. Эти животные обладают врожденной склонностью выбирать емкости, содержащие большее число съедобных предметов.

100 лет назад в Германии была известна лошадь по имени Умный Ганс, которая владела основами простой арифметики и следила за календарем. Во время своих публичных выступлений эта лошадь давала правильные ответы на вопросы, отстукивая копытом нужное число раз.

Илон Маск рекомендует:  Что такое код utf8_encode

Скептики говорили, что животное просто очень хорошо натренировано своим владельцем, однако после смерти Умного Ганса ни одна лошадь не могла исполнять подобные трюки.

Доктор Ультер и его коллеги из Эссекса провели ряд экспериментов. В 11 случаях из 13 лошади согласованно выбирали корзины, в которых содержалось три пластиковых яблока, в то время как в других корзинах было только два. Искусственные яблоки использовались для того, чтобы животные не могли почувствовать разницу в запахах.


Стоит отметить, что в феврале итальянские ученые опубликовали исследования, доказывающее, что считать до четырех способны рыбы. Такой вывод группе специалистов из Падуанского университета позволило сделать длительное наблюдение за пресноводной рыбой гамбузией, обитающей в реках и озерах Северной Америки.

Ученые установили, что преследуемая самцом самка гамбузии укрывается от его домогательств среди плавающих поблизости стаек рыб, причем если в стайке находится не более четырех особей, то гамбузия безошибочно выбирает среди них наибольшую.

Если же количество особей в косяке превышает число четыре, рыбка начинает путаться и может сделать верный выбор, когда размер одной стайки по крайней мере в два раза превышает размер другой.

По мнению ученых, данные наблюдений показывают, что способность рыб к счету не уступает возможностям обезьян и новорожденных детей в возрасте до 12 месяцев, которые также могут точно определять небольшие числа и гораздо менее аккуратно оценивают большое количество предметов.

Задача о ходе коня

Это, пожалуй, самая известная шахматная задача. Заключается в том, что бы обойти конем шахматную доску(буквой «Г»), наступив на каждую клетку только один раз.

Знаменитый математик Эйлер посвятил этой задаче большую работу «Решение одного любопытного вопроса, который, кажется, не подчиняется никакому исследованию».

Существуют замкнутые решения (последний ход коня заканчивается в одном ходе от начала) и незамкнутые решения.

Для шахматной доски размером 8 х 8 существует:

— 26,534,728,821,064 вариантов замкнутых решений

— 19,591,828,170,979,904 вариантов незамкнутых решений

Для квадратных досок N x N решение существует для всех N>=5

Многие наверное играли на бумаге в эту игру, кто не пробовал — попробуйте. На листочке в клетку 10 на 10 (можно любой размерности от 5) ставим цифры ходом коня, пока не заполним все поле. Довольно увлекательно можно было коротать какие-то скучные моменты в школе.


Найти одно из решений можно по правилу Варнсдорфа. Звучит оно так:

При обходе доски конь следует на то поле, с которого можно пойти на минимальное число ещё не пройденных полей. Если таких полей несколько, то можно пойти на любое из них.

С этим правилом решать такие задачи стало намного проще. Поэтому я решил написать игру немного усложнив правила. Игра под андроид называется Ход Конем.

Кому интересно напишите в комментариях, сделаю отдельный пост про неё, так как понимаю, что рекламу тут не любят)

Есть довольно интересные решения этой математической задачи. Например, есть решение, которое образует так называемый полумагический квадрат. Магический квадрат — квадратная таблица N x N, заполненная различными числами таким образом, что сумма чисел в каждой строке, каждом столбце и на обеих диагоналях одинакова.

Полумагический он только потому, что сумма чисел по диагоналям разная. Зато есть другие особенности:

Вот еще интересная, но уже 3D визуализация решения для поля 8 x 8 x 8:

Undefined behavior ближе, чем вы думаете

Многие считают, что неопределённое поведение программы возникает из-за грубых ошибок (например, запись за границы массива) или на неадекватных конструкциях (например, i = i++ + ++i). Поэтому для многих является неожиданностью, когда неопределенное поведение вдруг проявляет себя во вполне привычном и ничем не настораживающем коде. Рассмотрим один из таких примеров. Программируя на C/C++ никогда нельзя терять бдительность. Ад ближе чем кажется.

Описание ошибки

Я давненько не поднимал тему 64-битных ошибок. Тряхну стариной. В данном случае неопределённое проведение будет проявлять себя в 64-битной программе.

Рассмотрим некорректный синтетический пример кода.

Этот код корректно работает, если собрать 32-битную версию программы. А вот если собрать 64-битный вариант программы, всё намного интересней.


64-битная программа выделяет массив байт размеров в 5 гигабайт и заполняет его нулями. Затем в цикле массив заполняется какими-то случайными числами, неравными нулю. Чтобы числа не были равны 0, используется «| 1».

Попробуйте угадать, как поведёт себя эта программа, собранная в режиме x64 с помощью компилятора, входящего в состав Visual Studio 2015. Заготовили ответ? Если да, то продолжим.

Если вы запустите отладочную версию этой программы, то она упадёт из-за выхода за границу массива. В какой-то момент переменная index переполнится и её значение станет равно ?2147483648 (INT_MIN).

Логичное объяснение? Ничего подобного! Это неопределённое поведение и произойти может всё что угодно.

Когда я или кто-то ещё говорит, что это неопределённое поведение, люди начинают ворчать. Я не знаю почему, но люди уверены, что точно знают, как работают вычисления в C/C++ и как ведут себя компиляторы.

Но на самом деле они этого не знают. Если бы знали, они бы не говорили всякие глупости. Обычно глупости выглядят как-то так (собирательный образ):

Вы несете теоретический бред. Ну да, формально переполнение ‘int’ приводит к неопределенному повреждению. Но это не более чем болтовня. На практике, всегда можно сказать что получится. Если к INT_MAX прибавить 1, мы получим INT_MIN. Быть может и есть какие-то экзотические архитектуры, где это не так, но мой компилятор Visual C++ / GCC выдают корректный результат.

Так вот, сейчас я без всякой магии на простом примере продемонстрирую неопределённое поведение и не на какой-то волшебной архитектуре, а в Win64-программе.

Достаточно собрать приведённый выше пример в режиме Release x64 и запустить его. Программа перестанет падать, а сообщение «the last array element contains 0» выдано не будет.

Неопределенное поведение здесь проявило себя следующим образом. Массив будет полностью заполнен, не смотря, на то, что тип ‘int’ недостаточен для индексации всех элементов массива. Для тех, кто не верит, предлагаю взглянуть на ассемблерный код:

Вот оно проявление неопределенного поведения! И никаких экзотических компиляторов. Это VS2015.

Если заменить ‘int’ на ‘unsigned’ неопределённое поведение исчезнет. Массив будет заполнен только частично и в конце будет выдано сообщение «the last array element contains 0».

Ассемблерный код, когда используется ‘unsigned’:


Примечание про PVS-Studio

Анализатор PVS-Studio напрямую не диагностирует переполнение знаковых переменных. Это неблагодарное занятие. Почти невозможно предсказать, какие значения будут иметь те или иные переменные и произойдет переполнение или нет. Однако, он может заметить в этом коде ошибочные паттерны, которые он связывает с «64-битными ошибками».

На самом деле никаких 64-битных ошибок нет. Есть просто ошибки, например, неопределённое поведение. Просто эти ошибки спят в 32-битном коде и проявляют себя в 64-битном. Но если говорить про неопределённое поведение, то это не интересно, и никто покупать анализатор не будет. Да ещё и не поверят, что могут быть какие-то проблемы. А вот если анализатор говорит, что переменная может переполниться в цикле, и что это ошибка «64-битная», то совсем другое дело. Profit.

Илон Маск рекомендует:  Что такое код lptodp

Приведенный выше код PVS-Studio считает ошибочным и выдаёт предупреждения, относящиеся к группе 64-битных диагностик. Логика следующая: в Win32 переменные типа size_t являются 32-битными, массив на 5 гигабайт выделить нельзя и всё корректно работает. В Win64 стало много памяти, и мы захотели работать с большим массивом. Но код отказал и даёт сбой. Т.е. 32-битный код работает, а 64-битный нет. В рамках PVS-Studio это называется 64-битной ошибкой.

Вот диагностические сообщения, которые выдаст PVS-Studio на код приведённый в начале:

  • V127 An overflow of the 32-bit ‘index’ variable is possible inside a long cycle which utilizes a memsize-type loop counter. consoleapplication1.cpp 16
  • V108 Incorrect index type: array[not a memsize-type]. Use memsize type instead. consoleapplication1.cpp 16

Подробнее на тему 64-битных ловушек предлагаю познакомиться со следующими статьями:

Корректный код

Чтобы всё работало хорошо, надо использовать подходящие типы данных. Если вы собираетесь обрабатывать большие массивы, то забудьте про int и unsigned. Для этого есть типы ptrdiff_t, intptr_t, size_t, DWORD_PTR, std::vector::size_type и так далее. В данном случае пусть будет size_t:

Вывод

Если конструкция языка С++ вызывает неопределённое поведение, то она его вызывает и не надо с этим спорить или предсказывать как оно проявит себя. Просто не пишите опасный код.

Есть масса упрямых программистов, которая не хочет видеть ничего опасного в сдвигах отрицательных чисел, переполнении знаковых чисел, сравнивании this c нулём и так далее.


Не будьте в их числе. То, что программа сейчас работает, ещё ничего не значит. Как проявит UB предсказать невозможно. Ожидаемое поведение программы — это всего лишь один из вариантов UB.

» Статьи по разработке современных Windows приложений

7 шагов по переносу программы на 64-битную систему
Аннотация. В статье рассмотрены основные шаги, обеспечивающие корректный перенос 32-битных Windows приложений на 64-битные Windows системы. Хотя статья ориентирована на разработчиков, использующих язык Си/Си++ в среде Visual Studio 2005/2008, она будет полезна и другим разработчикам, планирующим перенос своих приложений под 64-битные системы.

Отладка и оптимизация многопоточных OpenMP-программ
Аннотация. Задача знакомства программистов с областью разработки параллельных приложений становится все актуальней. Данная статья является кратким введением в создание многопоточных приложений, основанных на технологии OpenMP. Описаны подходы к отладке и оптимизации параллельных приложений.

Что такое «Parallel Lint»?
Аннотация. Статья рассказывает о новом направлении в развитии статических анализаторов кода — верификации параллельных программ. В статье рассказывается о нескольких статических анализаторах, которые могут претендовать на звание «Parallel Lint».

Учебное пособие по PVS-Studio
Аннотация. Статья представляет собой учебное пособие (tutorial) по работе с анализатором кода PVS-Studio. Из нее вы узнаете об основных возможностях PVS-Studio, принципах работы с инструментом, а также об особенностях анализа кода некоторых типов приложений.

64-битный конь, который умеет считать
Аннотация. Статья посвящена особенностям поведения компилятора Visual C++ при генерации 64-битного кода и связанными с этим потенциальными ошибками.

Интервью с Дмитрием Вьюковым — автором верификатора Relacy Race Detector (RRD)
Аннотация. Интервью с Дмитрием Вьюковым — автором инструмента Relacy Race Detector (RRD) для верификации параллельных приложений. В статье вы узнаете об истории создания RRD, его основных возможностях, а также о некоторых других аналогичных инструментах и их отличии от RRD.

Параллельные алгоритмы обработки данных
Аннотация. Статья посвящена вопросам использования параллельных алгоритмов для создания современных эффективных программных решений. Актуальность данной тематики обусловлена снижением темпов роста тактовой частоты микропроцессоров и возрастанием внимания к использованию всех возможностей многоядерных и многопроцессорных систем. В работе рассмотрен ряд базовых параллельных алгоритмов, таких как умножение матриц, параллельная сортировка Бэтчера, метод Гаусса решения систем линейных алгебраических уравнений и так далее. Приведена реализация этих алгоритмов c использованием языка программирования Си++.

Расчет минимального времени выполнения задач при оптимальном распределении нагрузки между процессорами
Аннотация. В статье кратко рассмотрены методы расчета минимального времени выполнения задач при оптимальном распределении нагрузки между процессорами. Приведенные методы могут применяться для однородных и неоднородных вычислительных систем.

Оптимизация 64-битных программ
Аннотация. В статье рассмотрен ряд способов повышения производительности 64-битных Windows приложений.

64-битный конь, который умеет считать

Published on
05-Jul-2015

  • 1. 64- , : : 11.05.2009 Visual C++ 64- . » «, , 1911 [1]. , , . , . , , . ! ? . , , , . , — , , «». , — . , , . . , , . 21- 64- , , . .1. , 64-. : http://www.viva64.com/ru/articles/64-bit-development. , » » » «, «» [2, 3, 4]. , , . — int. , . , . int 64- , , 0..INT_MAX.

2. , «». , , , . , debug-, «» release-. , debug, . , debug- . , release-, . , . , , (-, , ). , Viva64. , , — , . .2. — JMP ?- . Visual C++ 2005 PortSample. , Viva64 , Viva64. , 32- 64- . , release . , 64- — ! . «volatile», PortSample. Visual C++ 2008. , Visual C++ 2005, Visual C++ 2008. . , , , . . , , . , , . , release- .3. , , : , . . . , 4. 4, 8. 3. , , . 32768 , 16- . , , , . , release , :int index = 0;size_t arraySize = . ;for (size_t i = 0; i != arraySize; i++)array[index++] = BYTE(i); , INT_MAX. , index int. — . :0000000140001040 mov byte ptr [rcx+rax],cl0000000140001043 add rcx,10000000140001047 cmp rcx,rbx000000014000104A jne wmain+40h (140001040h) , 64- . :int index = 0;for (size_t i = 0; i != arraySize; i++) , . , . — . :0000000140001040 movsxdrcx,r8d0000000140001043 mov byte ptr [rcx+rbx],r8b0000000140001047 add r8d,1000000014000104B sub rax,1 4. 000000014000104F jne wmain+40h (140001040h) , . r8d = 0x80000000 rcx 0xffffffff80000000. — . . :unsigned index = 0;for (size_t i = 0; i != arraySize; ++i) > :0000000140001040 mov byte ptr [rdx],10000000140001043 add rdx,10000000140001047 cmp byte ptr [rcx+rax],1000000014000104B jne wmain+58h (140001058h)000000014000104D add rcx,10000000140001051 cmp rcx,rdi0000000140001054 jne wmain+40h (140001040h) 64- rdx index. UINT_MAX. . :volatile unsigned volatileVar = 1;. unsigned index = 0;for (size_t i = 0; i != arraySize; ++i) > index++ «index += volatileVar;» , 32- , — :0000000140001040movecx,r8d0000000140001043addr8d,dword ptr [volatileVar (140003020h)]000000014000104Amovbyte ptr [rcx+rax],1000000014000104Ecmpbyte ptr [rdx+rax],10000000140001052jnewmain+5Fh (14000105Fh)0000000140001054addrdx,10000000140001058cmprdx,rdi000000014000105Bjnewmain+40h (140001040h) , . , , . , .ptrdiff_t UnsafeCalcIndex(int x, int y, int w . release-. UnsafeCalcIndex , 64- : 6. 0000000140001052testrsi,rsi0000000140001055jewmain+6Ch (14000106Ch)0000000140001057lea rcx,[r9+rax]000000014000105Bmov rdx,rsi000000014000105Exchgax,ax0000000140001060mov byte ptr [rcx],10000000140001063add rcx,rbx0000000140001066sub rdx,1000000014000106Ajne wmain+60h (140001060h)000000014000106Cadd r9,10000000140001070cmp r9,rbx0000000140001073jne wmain+52h (140001052h) — , UnsafeCalcIndex . , , , . () UnsafeCalcIndex. , :ptrdiff_t UnsafeCalcIndex(int x, int y, int w >

64 битный конь, который умеет считать

Откуда берутся бестселлеры? Прямо из нашей жизни. Однажды автор ехала поездом в Лондон. В ее вагон вошли двое молодых людей с черными мешками. Когда выяснилось, что их лишь сегодня выпустили из тюрьмы, ей стало не по себе – и в то же время ужасно захотелось узнать, что же будет дальше. Так возник этот роман…

Двое привлекательных парней подсели к паре молоденьких девушек у окна в поезде и начали флиртовать. Сидевшая неподалеку Элла Лонгфилд не обращала на них внимания, пока случайно не услышала, что парни только сегодня вышли из тюрьмы. Ее стали мучить сомнения. Вмешаться или нет? Мало ли что можно ожидать от двух бывших заключенных… В конце концов, она сама мать. В итоге Элла решила не вмешиваться – у молодежи свои дела, своя жизнь. А на следующее утро ее буквально ошарашила новость: одна из тех девушек, зеленоглазая Анна, бесследно исчезла…

Прошел год. Анну до сих пор не нашли, ее попутчиков – тоже. Эллу терзают угрызения совести. И в довершение ко всему, кто-то шлет ей открытки с угрозами. Кто-то знает, что она промолчала. Кто-то следит за ней. Кто-то хочет, чтобы она ответила за всё…

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL