Size: a a a

2020 January 06

CC

Cool Cooler in C++ Together 2.0
Cool Cooler
My own circle renderer failed like this. Why? Maybe it's becuase some integer overflow? The code is:
sf::Uint8* circle(int r1, int r2, sf::Uint32 inner, sf::Uint32 outer)
{
   sf::Uint8* res = new sf::Uint8[r1 * 2 * r2 * 2 * 4];
   for (int i = 0; i < r1 * 2; i++)
   {
       for (int j = 0; j < r2 * 2; j++)
       {
           ((sf::Uint32*)res)[i * r2 * 2 + j] =
           ((i - r1) * (i - r1) * r2 * r2 +
           (j - r2) * (j - r2) * r1 * r1 <=
           r1 * r1 * r2 * r2) ? inner : outer;
       }
   }
   return res;
}

The call for this function is:
sf::Uint8* pixels = circle(512, 512, 0, -256);
При меньших размерах эллипса работает лучше, кстати.
источник

🦊

🦊fox.cpp in C++ Together 2.0
Логично предположить, что тут что-то переполняется
источник

p

pepeground_bot in C++ Together 2.0
что значит нормальный? тут есть.
источник

CC

Cool Cooler in C++ Together 2.0
🦊fox.cpp
Логично предположить, что тут что-то переполняется
Вот я тоже так предположил.
источник

CC

Cool Cooler in C++ Together 2.0
Вот в питоне бы такого не было.
источник

🦊

🦊fox.cpp in C++ Together 2.0
-fsanitize=undefined давай
источник

CC

Cool Cooler in C++ Together 2.0
🦊fox.cpp
-fsanitize=undefined давай
Это где писать?
источник

🦊

🦊fox.cpp in C++ Together 2.0
во флагах компилятора
источник

🦊

🦊fox.cpp in C++ Together 2.0
меня, конечно, убивает ещё то, как ты sf::Uint8* используешь, но да хер с ним
источник

CC

Cool Cooler in C++ Together 2.0
🦊fox.cpp
во флагах компилятора
То же самое.
источник

CC

Cool Cooler in C++ Together 2.0
А нет
источник

CC

Cool Cooler in C++ Together 2.0
Не компилится
источник

🦊

🦊fox.cpp in C++ Together 2.0
??
источник

CC

Cool Cooler in C++ Together 2.0
Не знаю, как в IDE ошибку скопировать, ща через консоль сделаю.
источник

🦊

🦊fox.cpp in C++ Together 2.0
Cool Cooler
My own circle renderer failed like this. Why? Maybe it's becuase some integer overflow? The code is:
sf::Uint8* circle(int r1, int r2, sf::Uint32 inner, sf::Uint32 outer)
{
   sf::Uint8* res = new sf::Uint8[r1 * 2 * r2 * 2 * 4];
   for (int i = 0; i < r1 * 2; i++)
   {
       for (int j = 0; j < r2 * 2; j++)
       {
           ((sf::Uint32*)res)[i * r2 * 2 + j] =
           ((i - r1) * (i - r1) * r2 * r2 +
           (j - r2) * (j - r2) * r1 * r1 <=
           r1 * r1 * r2 * r2) ? inner : outer;
       }
   }
   return res;
}

The call for this function is:
sf::Uint8* pixels = circle(512, 512, 0, -256);
тврщ
источник

🦊

🦊fox.cpp in C++ Together 2.0
это больше 2^32-1
источник

CC

Cool Cooler in C++ Together 2.0
источник

🦊

🦊fox.cpp in C++ Together 2.0
считай в uint64, если не можешь придумать, как не делать такие огромные цифры
источник

🦊

🦊fox.cpp in C++ Together 2.0
у тебя SFML не прилинкован
источник

CC

Cool Cooler in C++ Together 2.0
🦊fox.cpp
у тебя SFML не прилинкован
А как прилинковать?
источник