一路小编程练习的疑惑

一道小编程练习的疑惑
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?(限制在十万范围内找)

#include <stdio.h>
#include <math.h>

int main()
{
int i;
int x, y;

for (i = 0; i <= 100000; i++)
{
x = (int)sqrt(i + 100);
y = (int)sqrt(i + 268);

if (x * x == i + 100 && y *y == i + 268)
{
printf("%d\n", i);
}
}

return 0;
}
这样是可以的

如果把x,y声明为double类型,且把int的强行转化去掉,就会把0到100000都打出来啊?求解

------解决方案--------------------
引用:
我不明白的是:比如对3开方得到的无限小数保存到double中也应该是有精度损失的啊!两者相乘应该不会完全的等于3

也许是编译器的优化