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

Calculating sqrt and arcTan in javacard without float type

我想在 javacard 中计算 sqrt 和反正切。我没有任何数学库可以为我做这个,我也没有浮点类型来手动计算它。我有一些疑问:

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

我找到了一些链接,但无法帮助我: http://javacardos.com/javacardforum/viewtopic.php?t=437

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

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

只是迭代

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

使用合适的首字母 R

这样的值可以通过

找到
R= 1
while S > 2:
  R*= 2
  S/= 4

(如果可用,最好采用轮班实施)。

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

CORDIC 在计算 atan 时的想法是 table 个值

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;

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