Форум программистов, компьютерный форум, киберфорум
C/C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
 Аватар для yukhm
1 / 1 / 0
Регистрация: 19.04.2011
Сообщений: 28

Разъясните, как работает код функции умножения

23.05.2022, 22:03. Показов 1476. Ответов 7
Метки geek (Все метки)

Студворк — интернет-сервис помощи студентам
Итак есть простая функции умножения двух целых чисел:
C++
1
2
3
int multiply(int a, int b) {
  return  a * b;
}
И тут встретил такой вариант реализации данной функции:
C++
1
const double multiply = 18117629973988060449308518964918467752448300643542725371361122020537593562421864700213872973439671302938629031182012696940773376.0;
Причем нижеприведенный тест успешно проходят обе
C++
1
2
3
4
5
6
7
#include <criterion/criterion.h>
int multiply(int, int);
 
Test(ExampleTests, should_pass_all_the_tests_provided) {
    cr_assert_eq(multiply(5, 6), 30);
    cr_assert_eq(multiply(12, 12), 144);
}
Может кто-нить объяснить, как работает чудо во втором варианте?
0-0
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.05.2022, 22:03
Ответы с готовыми решениями:

Разъясните, пожалуйста, как работает this
Здравствуйте! Есть небольшой примерчик программы которая подсчитывает количество определенных символов private void...

Разъясните что такое OUT и как оно работает
Всем доброго времени. Изучаю С# и столкнулась с трудностью. И не понимаю одного момента. static int Test(out int x, int y=4) { x = 6;...

Разъясните пожалуйста как работает эта часть кода
K = 0 ' (ПОЯСНИТЕ ВОТ ЭТО ПОЧЕМУ 0) For i = 1 To 4 ' (Это Я знаю наверное цикл, который выполняется на строке??) For j = 1 To 4 ' (Это...

7
531 / 180 / 39
Регистрация: 18.08.2012
Сообщений: 907
23.05.2022, 23:25
Цитата Сообщение от yukhm Посмотреть сообщение
И тут встретил такой вариант реализации данной функции:
Цитата Сообщение от yukhm Посмотреть сообщение
const double multiply
и где здесь функция?
0
 Аватар для yukhm
1 / 1 / 0
Регистрация: 19.04.2011
Сообщений: 28
24.05.2022, 01:33  [ТС]
В общем я тож голову сломал, а потом повнимательнее посмотрел сайт, где мне это встретилось, а именно код предоставил вот этот товарищ https://www.codewars.com/kata/... 0001ba0f54
и там он написал, что этот код не работает правильно и нужно попытаться понять почему, хотя тест на сайте codewars этот код проходит на ура. Но вот сколько я ни пробовал у себя на компе gcc ругается на то, что это не функция, ну это и так понятно по синтаксису. На первый взляд кажется, что код тест проходит потому, что в памяти это длинное число видимо представляет собой соответствующий машинный код умножения целых, но неверный синтаксис функции наводит на мысль, что это баг теста на сайте codewars. Короче, эта тема мне уже не интересна.

Ну еще приведу занимательный код аналога вышеназванной функции умножения:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#define a int
#define aa multiply
#define aaa (
#define aaaa ,
#define aaaaa )
#define aaaaaa {
#define aaaaaaa return
#define aaaaaaaa *
#define aaaaaaaaa ;
#define aaaaaaaaaa }
 
 
a aa aaa a aaaaaaaaaaaaaa aaaa a aaaaaaaaaaaaaaaaaaaaaa aaaaa aaaaaa
  aaaaaaa aaaaaaaaaaaaaa aaaaaaaa aaaaaaaaaaaaaaaaaaaaaa aaaaaaaaa
aaaaaaaaaa
Баловство конечно, но прикольно
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,536
Записей в блоге: 1
30.05.2022, 16:49
yukhm, не открывается без авторизации. А у меня ни гитхаба, ни гугла, ничего нет. Это точно сайт для программистов?
0
531 / 180 / 39
Регистрация: 18.08.2012
Сообщений: 907
31.05.2022, 02:21
Цитата Сообщение от yukhm Посмотреть сообщение
На первый взляд кажется, что код тест проходит потому, что в памяти это длинное число видимо представляет собой соответствующий машинный код умножения целых
Цитата Сообщение от yukhm Посмотреть сообщение
1811762997398806044930851896491846775244 8300643542725371361122020537593562421864 7002138729734396713029386290311820126969 40773376.0


это, точно не код.
это просто способ, как съесть чьё-то чужое время на разгадывание "нечто"
0
531 / 180 / 39
Регистрация: 18.08.2012
Сообщений: 907
31.05.2022, 02:45
хотя...
если учесть формат хранения Little-Endian
Вложение 1347321
что-то такое получается но, по приведённому отрывку кода - непонятно, как это могло у них стать функцией.

Добавлено через 14 минут
т.е. другими словами, для того, чтоб этот "код" хоть, как-то работал - надо, чтоб параметры в так называемую функцию - передавались через регистры ESI и EDI.
Возможно, только благодаря ассерту
cr_assert_eq
эта чудо-хрень - и работает у них на сайте.
0
531 / 180 / 39
Регистрация: 18.08.2012
Сообщений: 907
31.05.2022, 21:45
перезалил последний аттач
2
 Аватар для yukhm
1 / 1 / 0
Регистрация: 19.04.2011
Сообщений: 28
02.06.2022, 00:48  [ТС]
Kuzia domovenok, это сайт типа для повышения уровня своей подготовки по какому-либо языку программирования путем прохождения тестов, а также участия в батлах с другими программерами, правда все на английском. Я на этот сайт случайно набрел, сам особо его не юзал, так поверхностно.

untyped, ну ты заморочился! Спасибо, конечно за труд, очень похоже на правду, только все равно не понятно, как у них байты из сегмента данных попали в сегмент исполняемого кода. Как устроен ассерт ваще не представляю, потому никак прокомментировать не могу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.06.2022, 00:48
Помогаю со студенческими работами здесь

Ребят, разъясните, пожалуйста, как сделать код, позволяющий заполнить одномерный массив
Ребят, разъясните, пожалуйста, как сделать код, позволяющий заполнить одномерный массив вида: __ G= ,i=l,m

Разъясните эту строку как мне это привязать к функции
double (*func4 (double, double)); - как это привязать к функции, как я понимаю это масив указателей на функцию, но она почему то не...

Ускорить код функции умножения огромных чисел (без BigInt)
Всем привет. Вот задача: https://www.codewars.com/kata/55911ef14065454c75000062/train/javascript BigInt использовать нельзя....

Разъясните код
import java.io.*; /** * Test driver for class &lt;code&gt;AthleteScores&lt;/code&gt;. * * @author Turdiev Anvar * @version 1.0.0 ...

Разъясните код
Здравствуйте! Расскажите, пожалуйста, что обозначает это, почему вообще так пишется: #define STATE(name) DWORD WINAPI name(DWORD...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru