1 Востаннє редагувалося Betterthanyou (28.12.2016 17:45:12)

Тема: GMP, підключення

Я ніяк не можу підключити GMP до QT (або Visual Studio).

Я робив так:
- Оскільки в мене вже є QCreator і MinGW то я його не встановлював
- Встановив MSYS, і під'єднав до MinGW
- Зробив директорію

mkdir gmp

і розпакував туди GMP 6.1.2
- Написав такі команди (з інструкції)

./configure --prefix=/gmp
make
make check 
make install 
make clean

- В мене появилися в директорії файли

- Тепер я знов написав команди

./configure --prefix=/home/agapiy/gmp --disable-static --enable-shared
make
make check
make install

Осталося зібрати лише libgmp.lib

Але тут проблема, я скопіював LIB.EXE і LINK.EXE з VC в директорію .libs, написав

C:\msys\1.0\home\myname\gmp\.libs\lib.exe /machine:x86 /def:libgmp-3.dll-def

спочатку була помилка unable to load mspdb140.dll і її виправив скопіювавши mspdb140.dll з VC в SysWOW64
тепер помилка LNK1104 cannot open file "libgmp-3.dll.def"
Як її виправити ? Можливо ви підключали GMP до QT (або Visual Studio) розкажіть як, або дайте посилання на статтю.

Я користувався цією статтею і ще знайшов тут інструкцію, але всерівно не виходить. Помилка LNK1104 cannot open file "libgmp-3.dll-def"

2

Re: GMP, підключення

Ви спочатку вирішить потрібна вам вся gmp чи може достить підмножини mini-gmp (яку набагато леше підключати). Для вінди є повністю сумісний порт MPFR. Криптолокера пишете?

Подякували: Betterthanyou1

3 Востаннє редагувалося Betterthanyou (29.12.2016 14:01:37)

Re: GMP, підключення

О вже все вийшло, спочатку з mini-gmp попробував, а потім спробував видалити всі директорії що створив під час першої спроби зібрати GMP, і ще раз зібрав його, на цей раз вдало, але ще півгодини не міг зрозуміти чому після компіляції програма не видає результат, як виявилось я забув закинути DLL

Якщо хтось ще буде робити щось з GMP то робіть так як я з верху розписав,
Тільки будьте уважні
Я коли робив lib то через неуважності почав писати це в консолі windows а не в MSYS
В QT проект не додав DLL, якщо ви зробите так само програма створиться але робити не буде
В загальному у проекті мають бути
- libgmp-3.dll
- gmp.h
- libgmp-3.def
- libgmp-3.lib

а pro файл має виглядати так (там потрібно стерти d)

/*це стандартна частина*/
QT += core
QT -= gui

CONFIG += c++11

TARGET = Ar
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

SOURCES += main.cpp
/*а це додасться після того як ви додасте бібліотеку*/
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/./ -llibgmp-3
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/./ -llibgmp-3
else:unix: LIBS += -L$$PWD/./ -llibgmp-3

INCLUDEPATH += $$PWD/.
DEPENDPATH += $$PWD/.

4 Востаннє редагувалося Betterthanyou (29.12.2016 14:06:22)

Re: GMP, підключення

0xDADA11C7 написав:

Криптолокера пишете?

Прихований текст

Вже писав, суть його проста, мій "CryptoLocker" якщо його так можна назвати, зчитував файл побайтно і інверсував його, потім створював файл який має включатися при стартів windows і видаляв себе (що не хто не зміг підглянути алгоритм "кодування", за допомогою дизасемблера наприклад)

char ch = Зчитати();
ch = ~ch;
Записати_назад()

Але більшість "жертв" не здогадаються що все так просто...
(робив з експериментальною цілю)

Якщо б хтось створював CryptoLocker з GNU GMP

http://s8.сайт-злодій/uploads/images/2016/12/a0198157d5ce573a5e9c97e4a91cc5ce.jpg

Подякували: 0xDADA11C71

5 Востаннє редагувалося Betterthanyou (29.12.2016 14:11:09)

Re: GMP, підключення

Я пишу генератор фотографій
Я так подумав про перепони, чому в мене не генерується зразу зображення, і вияснив що їх є дів (поки що)
1) Потрібно генерувати фото (зображення) по певним правилам (наприклад не можуть дуже швидко змінити свій колір пікселі) ці правила можна взяти дослідивши архіватори (а точніше алгоритми архівування), для зображень є свої методи архівування які не підходять для тексту, звуку і т.д, так от якщо я буду генерувати фото по якимось (що я поки ще придумав) розумним алгоритмам то шум зменшиться.
2)

Рекурсія у зображеннях

http://dsproav.com/27/flowchart-for-fibonacci-series-using-recursion-20.png

Якщо я уникну рекурсії, то зображення будуть генеруватися в рази швидше
За рекурсії я буду генерувати одні і ті ж зображення тому потрібно вигадати щось що допоможе уникнути її.

а це вже зайве

Але якщо в мене вийде, уявіть, заходите в instagram а там фото з ~1500 років - 3016 року і далі (жартую)

6 Востаннє редагувалося Betterthanyou (30.12.2016 12:23:56)

Re: GMP, підключення

Допоможіть перекласти цю документацію

тільки цю частину

Division Functions

Division is undefined if the divisor is zero. Passing a zero divisor to the division or modulo functions (including the modular powering functions mpz_powm and mpz_powm_ui), will cause an intentional division by zero. This lets a program handle arithmetic exceptions in these functions the same way as for normal C int arithmetic.

Function: void mpz_cdiv_q (mpz_t q, const mpz_t n, const mpz_t d)
Function: void mpz_cdiv_r (mpz_t r, const mpz_t n, const mpz_t d)
Function: void mpz_cdiv_qr (mpz_t q, mpz_t r, const mpz_t n, const mpz_t d)
Function: unsigned long int mpz_cdiv_q_ui (mpz_t q, const mpz_t n, unsigned long int d)
Function: unsigned long int mpz_cdiv_r_ui (mpz_t r, const mpz_t n, unsigned long int d)
Function: unsigned long int mpz_cdiv_qr_ui (mpz_t q, mpz_t r, const mpz_t n, unsigned long int d)
Function: unsigned long int mpz_cdiv_ui (const mpz_t n, unsigned long int d)
Function: void mpz_cdiv_q_2exp (mpz_t q, const mpz_t n, mp_bitcnt_t b)
Function: void mpz_cdiv_r_2exp (mpz_t r, const mpz_t n, mp_bitcnt_t b)
Function: void mpz_fdiv_q (mpz_t q, const mpz_t n, const mpz_t d)
Function: void mpz_fdiv_r (mpz_t r, const mpz_t n, const mpz_t d)
Function: void mpz_fdiv_qr (mpz_t q, mpz_t r, const mpz_t n, const mpz_t d)
Function: unsigned long int mpz_fdiv_q_ui (mpz_t q, const mpz_t n, unsigned long int d)
Function: unsigned long int mpz_fdiv_r_ui (mpz_t r, const mpz_t n, unsigned long int d)
Function: unsigned long int mpz_fdiv_qr_ui (mpz_t q, mpz_t r, const mpz_t n, unsigned long int d)
Function: unsigned long int mpz_fdiv_ui (const mpz_t n, unsigned long int d)
Function: void mpz_fdiv_q_2exp (mpz_t q, const mpz_t n, mp_bitcnt_t b)
Function: void mpz_fdiv_r_2exp (mpz_t r, const mpz_t n, mp_bitcnt_t b)
Function: void mpz_tdiv_q (mpz_t q, const mpz_t n, const mpz_t d)
Function: void mpz_tdiv_r (mpz_t r, const mpz_t n, const mpz_t d)
Function: void mpz_tdiv_qr (mpz_t q, mpz_t r, const mpz_t n, const mpz_t d)
Function: unsigned long int mpz_tdiv_q_ui (mpz_t q, const mpz_t n, unsigned long int d)
Function: unsigned long int mpz_tdiv_r_ui (mpz_t r, const mpz_t n, unsigned long int d)
Function: unsigned long int mpz_tdiv_qr_ui (mpz_t q, mpz_t r, const mpz_t n, unsigned long int d)
Function: unsigned long int mpz_tdiv_ui (const mpz_t n, unsigned long int d)
Function: void mpz_tdiv_q_2exp (mpz_t q, const mpz_t n, mp_bitcnt_t b)
Function: void mpz_tdiv_r_2exp (mpz_t r, const mpz_t n, mp_bitcnt_t b)

Divide n by d, forming a quotient q and/or remainder r. For the 2exp functions, d=2^b. The rounding is in three styles, each suiting different applications.

cdiv rounds q up towards +infinity, and r will have the opposite sign to d. The c stands for “ceil”.
fdiv rounds q down towards -infinity, and r will have the same sign as d. The f stands for “floor”.
tdiv rounds q towards zero, and r will have the same sign as n. The t stands for “truncate”.
In all cases q and r will satisfy n=q*d+r, and r will satisfy 0<=abs(r)<abs(d).

The q functions calculate only the quotient, the r functions only the remainder, and the qr functions calculate both. Note that for qr the same variable cannot be passed for both q and r, or results will be unpredictable.

For the ui variants the return value is the remainder, and in fact returning the remainder is all the div_ui functions do. For tdiv and cdiv the remainder can be negative, so for those the return value is the absolute value of the remainder.

For the 2exp variants the divisor is 2^b. These functions are implemented as right shifts and bit masks, but of course they round the same as the other functions.

For positive n both mpz_fdiv_q_2exp and mpz_tdiv_q_2exp are simple bitwise right shifts. For negative n, mpz_fdiv_q_2exp is effectively an arithmetic right shift treating n as twos complement the same as the bitwise logical functions do, whereas mpz_tdiv_q_2exp effectively treats n as sign and magnitude.

Мене цікавить що таке cdiv, fdiv і tdiv
Я так зрозумів що cdiv - для округлення в більшу сторону, fdiv - в меншу, tdiv - це просто викидає все що за крапкою, (наприклад якщо має бути 154.574 то буде 154) ?
Що це q, r, qr ? q - без залишку, r - залишок, qr - неповна частка і залишок ?

7

Re: GMP, підключення

Ділення n на d, утворює частку q і/або лишок r.

Приклад: 100 на 11
cdiv: q = 10, r = -10.
fdiv: q = 9, r = 1.
tdiv: q = 9, r = 1.

Приклад: -100 на 11
cdiv: q = -9, r = -1.
fdiv: q = -10, r = 10.
tdiv: q = -9, r = -1.

Написане вище є лише здогадом, який я гадаю неважко й перевірити.

Подякували: Betterthanyou1

8 Востаннє редагувалося Betterthanyou (01.01.2017 12:09:57)

Re: GMP, підключення

Yola написав:

Написане вище є лише здогадом, який я гадаю неважко й перевірити.

Прихований текст

Не зовсім так, я намагався перекласти, але поки що моїх навичок англійської не достатньо для цього тексту
rounds - це округлити число (round - круглий),
towards - до
up - вгору
down - вниз

трохи і догадуюсь.

Якщо дослівно то я переклав так

cdiv округлити число q вгору до +безкінечності, і r буде протилежний знак d. В стандарті "C" позначається “ceil” ("досягати граничної висоти")

fdiv округлити число q вниз -безкінечності, і r буде мати той же знак, що і d. В стандарті "C" позначається “floor” ("пол").

tdiv округлити число q до нуля, і r буде мати той же знак, що і n. В стандарті "C" позначається “truncate” ("усікати").

9

Re: GMP, підключення

Так вам потрібне не тільки розуміння, а й переклад? Типу, на якусь вікі чи блог хочте викласти? Бо для розуміння досить того, що я написав, здається, плюс спробувати, звісно.

cdiv округлює q в напрямку +нескінченності, і r матиме знак протилежний знаку d. c позначає “ceil/стеля”.

Подякували: Betterthanyou1