c语言开根号溢出怎么办

我需要循环求B=sqrt(i*i+a) , a是一个变量整数,i的范围从1-500,当i=182的时候,计算溢出,请问怎么处理呀?

i是int, a是float, B也是float
怀疑这里的int的范围在32767之间,i=182平方刚好溢出,请问我需要怎样转换成long保证不溢出?

建议查一查自己定义的数据类型,是不是在这边出了问题

设有a=x^2+2ix
则sqrt((i+x)(i+x))=sqrt(i^2+2ix+x^2)=sqrt(i^2+a)
因此只要套一元二次方程公式求a=x^2+2ix的正数解x,则结果直接就是i+x

又不知道你的a是多少,也可能是a溢出啊。

应该用无符号类型,0xF000FFFF 在int里是负数,sqrt()平方根不能用负数平方