色々試してみたけど、オーバーフローしたuintを直接floatにキャストするのがダメっぽいね
一回intにキャストすれば大丈夫だった
int - uintはintになるってわけじゃないのね

テストコード
#include <iostream>

int main()
{
int i=3;
size_t ui = 5;

float x = i-ui;
float x2 = i - static_cast<int>(ui);
int x3 = i - ui;
float x4 = static_cast<int>(i-ui);

std::cout << x << std::endl;
std::cout << x2 << std::endl;
std::cout << x3 << std::endl;
std::cout << x4 << std::endl;
std::cout << static_cast<float>(i-ui) << std::endl;
}