在没有浮点类型的javacard中计算sqrt和arcTan

时间:2016-12-23 18:48:06

标签: math javacard

我想在javacard中计算sqrt和arctangent。我没有任何数学库可以为我做这个,我没有浮动类型来手动计算它。我脑子里有一些问题:

1-我可以使用字节数组形式的浮点数并对其进行处理吗?怎么样? 2-通常如何在javacard中计算这些操作?

我找到了一些链接,但我无法帮助我: http://stackoverflow.com/questions/15363244/math-library-for-javacard http://javacardos.com/javacardforum/viewtopic.php?t=437

我应该提一下,我必须在卡上计算这些操作。非常感谢,如果有人可以帮助我。

2 个答案:

答案 0 :(得分:4)

如果整数除法可用,则Babylonian method可以计算整数平方根。

重复

R' = (R + S / R) / 2

使用合适的初始R

可以在

中找到这样的值
R= 1
while S > 2:
  R*= 2
  S/= 4

(如果有的话,最好采用轮班实施)。

R的值稳定时,您可以停止迭代(您还可以确定先验的恒定迭代次数,从而产生足够的精度)。

答案 1 :(得分:2)

计算atan时CORDIC的想法是有一个值表

angle[i] = atan(pow(2,-i));

如果角度是以弧度或度数预先计算的,则无关紧要。然后使用切线加法定理

tan(a+b)=(tan(a)+tan(b) ) / ( 1-tan(a)*tan(b) )

连续减少给定的切线值

tan(x) {
    if(x<0) return -atan(-x);
    if(x>1) return 2*angle[0]-atan(1/x);
    pow2=1.0;
    phi=0;
    for(i=0;i<10; i++) {
        if(x>pow2) {
            phi += angle[i];
            x = (x-pow2)/(1+pow2*x);
        }
        pow2 /= 2;
    }
    return phi+x;

现在需要将这些操作和常量转换为使用某种定点格式。