1

Тема: AHK: Возведение в степень vs умножение

Случайно наткнулся.


Y:=0
X:=5
loop,26
	X:=X*5
Y := 5**27
MsgBox,% X "/" Y "/" X-Y
Return

Оба результата
X = 7 450 580 596 923 828 125
Y = 7 450 580 596 923 828 224
далеки от
9 223 372 036 854 775 807, но неточность вычисления степени довольно заметна.

2

Re: AHK: Возведение в степень vs умножение

Переходите на AHK v2:

#Requires AutoHotkey v2
MsgBox 5**27 ; 7450580596923828125
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Возведение в степень vs умножение

Foma пишет:

далеки от
9 223 372 036 854 775 807

А что это такое?

4

Re: AHK: Возведение в степень vs умножение

Так понимаю, максимальное значение Int64.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Возведение в степень vs умножение

Скорее всего, здесь проблема в том, что под капотом в C++ при возведении в степень возвращается не целочисленный тип, а double, где при больших числах возможна потеря точности. Возможно, в v2 это как-то оптимизировано.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6

Re: AHK: Возведение в степень vs умножение

Собственно, вот: Precision limitations on integer values

num := 7450580596923828125
VarSetCapacity(bin, 128)
DllCall("msvcrt\_i64tow", "Int64", num, "Str", bin, "Int", 2, "Cdecl")
MsgBox % bin . "`n" . StrLen(bin)

Число 7450580596923828125 занимает 63 бита, соответственно, отображается с потерей точности.

num := 7450580596923828125
MsgBox % num ** 1
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: Возведение в степень vs умножение

В этом калькуляторе ответ: 7450580596923828000. Везде обман.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit), AHK v2.0.17| AHK-Wiki | Переменные и выражения | RegEx101

8

Re: AHK: Возведение в степень vs умножение

Я на виндосовском калькуляторе проверял, он правильно считает.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9

Re: AHK: Возведение в степень vs умножение

Я тоже в виндосовском проверил. Понятно же, что в конце должно быть "5".
Всем спасибо за инфу. Если замахиваться на AHK2, то с чего начинать? Есть хорошая справка на русском?

10

Re: AHK: Возведение в степень vs умножение

На русском нет, начинайте с освоения переводчика DeepL, потом сразу с этой статьи.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

11

Re: AHK: Возведение в степень vs умножение

Спасибо. А форум подобный этому на русском есть?

12

Re: AHK: Возведение в степень vs умножение

Да сотни, ищите в гугле.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

13

Re: AHK: Возведение в степень vs умножение

Я бы даже сказал, что тысячи.

14

Re: AHK: Возведение в степень vs умножение

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

15 (изменено: YMP, 2023-09-30 12:58:28)

Re: AHK: Возведение в степень vs умножение

Через переводчика-то все на русском.

Вот, к примеру:

ПРИВЕТ:)
(Установлена версия Autohotkey 2)

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

Теперь я хочу использовать для этого не мышь, а команду Keycommand. (! + вправо и !+ Влево)

Не могу понять, как щелкнуть левой кнопкой мыши и удерживать мышь:

Если я использую MouseClick "Влево", 100, 0, 'R', то сначала перемещаю мышь, а затем щелкаю, но не удерживаю ее.

Пробовал также MouseClickDrag "Left, 0, 0, 100, 'R'", но это абсолютно ничего не дает. Должен ли я использовать CoordMode раньше? На страницах справки есть только эта строка в качестве примера. Теперь я получаю сообщение об ошибке:
Ошибка: параметр # 2 MouseClickDrag в этом случае не должен быть опущен

Повторная попытка и еще одна ошибка: переменная не определена.

Как правильно использовать синтаксис для щелчка, удержания, а затем перемещения влево или вправо??

Или исправьте синтаксис MouseClickDrag для перемещения влево или вправо?

Большое спасибо;)
Бассман.