Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: NStra on March 26, 2015, 08:20:52 AM

Title: Ошибка в функции ARRPUSH
Post by: NStra on March 26, 2015, 08:20:52 AM
Функция ARRPUSH добавляет в массив неверное число, если нужное превышает 16 символов.
Код:
Code: [Select]
ARRPUSH($ARRY,12345678901234567)
PRINT($ARRY[0])
HALT
Лог:
Code: [Select]
15:19:34 12345678901234568
Windows 7 Ultimate x32
Clickermann v4.11 (Последняя версия)
Title: Re: Ошибка в функции ARRPUSH
Post by: Vint on March 26, 2015, 09:21:19 AM
Функция ARRPUSH добавляет в массив неверное число, если нужное превышает 16 символов.
Код:
Code: [Select]
ARRPUSH($ARRY,12345678901234567)
PRINT($ARRY[0])
HALT
Лог:
Code: [Select]
15:19:34 12345678901234568
Windows 7 Ultimate x32
Clickermann v4.11 (Последняя версия)

Это не ошибка, и уж тем более ARRPUSH здесь не при чём

Code: (clickermann) [Select]
$a = 12345678901234567
LOGWRITE($a)

Будет то же самое.

Это переполнение. Целые числа, как и в большинстве языков имеют свой диапазон.
В кликере целые ограничены 15 разрядами. В принципе, они остаются целыми до 18 разрядов, но точность младших разрядов при этом теряется, их просто негде сохранять.

Вот для наглядности
Code: (clickermann) [Select]
$a = 99999999999999
FOR($i=0, $i < 7)
   LOGWRITE($a)
   $a = $a * 10 + 1
END_CYC
HALT

Лог:
Code: [Select]
9:17:02 99999999999999
9:17:02 999999999999991
9:17:02 9999999999999910
9:17:02 99999999999999104
9:17:02 999999999999991040
9:17:02 999999999999991040*10+1
9:17:02 999999999999991040*10+1*10+1

А отдельного данных, типа "long", нет. Да и не нужен он пока.

Вопрос уже всплывал здесь http://crapware.aidf.org/forum/index.php?topic=132.0

Минимальные числа тоже имеют ограничения, и сплавающей запятой
Code: (clickermann) [Select]
$a= 0.0000000000001
LOGWRITE ($a)

Это будет минимальное число, добавить ещё один ноль не получится.

Диапазон немного странный, десятичный. В большинстве случаев он либо 32 либо 64 битный.