В последнее время мы заметили довольно серьезную проблему в нашей кодовой базе, из-за которой наш ГСЧ помешался. В настоящее время все наши игровые переменные сохраняются как числа с плавающей запятой, среди них максимальное значение long с игрового сервера. Когда это анализируется клиентом, он превращает число с плавающей запятой обратно в long. Пока все в порядке, мы думали, поскольку поплавок просто усекается. Однако при ближайшем рассмотрении это на самом деле не так. По неизвестным причинам длительный переполнен до отрицательного значения -9223372036854775808.
Почему это? Почему переполнение?
Вот простой пример C # для воспроизведения:
static void Main(string[] args)
{
float test = long.MaxValue;
long testLong = (long) test;
Console.WriteLine("[random debug]: " + test + " vs. " +testLong);
}
который напечатает:
[random debug]: 9.223372E+18 vs. -9223372036854775808