Иконка ресурса

_wS_

Участник
Сообщения
383
Реакции
760
  • Автор ресурса
  • #1
wS добавил(а) новый ресурс:

uint - Математические операции с unsigned int (не позволяем SourcePawn терять сознание)

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

C++:
public void OnPluginStart()
{
    int x = 2147483650 / 2; // Должно быть 1073741825
    PrintToServer("%%u = %u\n%%d = %d\n%u > 1000 = %s", x, x, x, x > 1000 ? "yes" : "no");
}
И увидеть:

C-подобный:
%u = 3221225473
%d = -1073741823
3221225473 > 1000 = no

Все значения неверные + сравнение не работает.
Всё ломается, когда значение превышает int лимит (2147483647).

Несколько...

Узнать больше об этом ресурсе...
 
Последнее редактирование:

RusJJ

Доброе утро девачьки
Сообщения
2,582
Реакции
1,075
А разве это баг, а не обычная невозможность превысить для int лимит в [-2147483648; 2147483647]?
Ну а так возможно кому-то будет полезным, только надо немножко описание поменять, как мне кажется.
 
  • Мне нравится
Реакции: _wS_

_wS_

Участник
Сообщения
383
Реакции
760
  • Автор ресурса
  • #4
wS обновил(а) ресурс uint новой записью:

Зачем нам краш из-за FormatTime и его int ограничения

Подъехал натив:
C-подобный:
native bool FormatUTime(char[] buffer, int maxlength, const char[] format, int stamp=0);

C++:
public void OnPluginStart()
{
    char s[128];
 
    // Было:
    FormatTime(s, sizeof(s), "%d.%m.%Y - %H:%M:%S", 4294967295);
    PrintToServer(s); // 27.01.2021 - 05:35:06 (I'm not sure, I'm begging on my knees forgive me.)
 
    // Стало:
    FormatUTime(szf(s), "%d.%m.%Y - %H:%M:%S", 4294967295);
    PrintToServer(s); // 07.02.2106 - 08:28:15 (I'm sure!)...

Узнать больше об этом обновлении...

только надо немножко описание поменять
Сделал. Теперь лучше?)

А разве это баг, а не обычная невозможность превысить для int лимит в [-2147483648; 2147483647]?
Так и есть, но баг я имел в виду со стороны пользователя, а не SM, когда такие как я не учитывают, что SourcePawn это signed int.
Вроде крупное обновление выкатили, а uint не придумали, хотя это же те же 4 байта, печалит.
 
Последнее редактирование:

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #5
Вроде крупное обновление выкатили, а uint не придумали, хотя это же те же 4 байта, печалит.
Можно им намекнуть. Разрабы скриптовой среды не занимаются сурсмодом же.
Попробовал создать issue сейчас, посмотрим, пойдёт ли дело или обсуждение хоть какое-нибудь.
 

_wS_

Участник
Сообщения
383
Реакции
760
  • Автор ресурса
  • #6

_wS_

Участник
Сообщения
383
Реакции
760
  • Автор ресурса
  • #7
_wS_ обновил(а) ресурс uint новой записью:

FormatUTime быстрее на 46.72%

Циклов для 4294967295 было: 73005, стало: 49759. Было бы круче добавлять сначала годы/месяцы, сначала так и хотел, но всплывали недочеты. Это наверно последняя ускоряющая правка, хотя через какое-то время подумаю еще над функцией, или может кто-нибудь предложит лучшее решение.

Узнать больше об этом обновлении...
 

Похожие темы

Сверху Снизу