int32变量的平方根

时间:2015-05-06 09:55:59

标签: matlab

我尝试使用sqrt()函数计算类型 int32 变量的平方根,但我收到此错误:未定义函数'sqrt'表示输入参数 输入'int32'。然后我发现有一个名为isqrt()的函数计算整数变量类型的平方根,但它在我的Matlab版本(R2013a)中不存在。我试着下载这个功能,但我找不到它。我尝试将值提供给(1/2)但整数只能提升到正整数幂。

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:3)

您可以使用匿名函数编写自己的isqrt

%// variable
A = int32(16)

%// helper function
isqrt = @(x) int32(sqrt(double(x)))

%// root
iroot = isqrt(A)

如果你确定它实际上可以计算根,那么这个函数应该就这样使用,因为将一个十进制值转换为int32(...)会使它四舍五入,而不会显示错误。

因此,为了使其更加健壮,您可以创建一个类似的函数:

function iroot = isqrt(integer)

    root = sqrt(double(integer));
    if mod(root,1) == 0
        iroot = int32( root );
    else
        disp('Input has no integer root')
    end

end

答案 1 :(得分:1)

这是一个解决方案,可以避免使用fix从double转换为整数类型时发生的舍入,并且它还支持使用castclass函数的任何整数类型:

isqrt = @(x) cast(fix(sqrt(double(x))), class(x));

例如:

>> isqrt(int32(15))
ans =
    3

然而

>> int32(sqrt(double(int32(15))))
ans =
           4

使用fix代替floor来正确处理负值:

>> isqrt(int8(-15))
ans =
    0 +    3i