Math 无浮点型javacard中sqrt和arcTan的计算

Math 无浮点型javacard中sqrt和arcTan的计算,math,javacard,Math,Javacard,我想在javacard中计算sqrt和反正切。我没有任何数学库来为我做这件事,我也没有浮点类型来手动计算它。我脑子里有一些问题: 1-我可以在字节数组形式中使用浮点数并处理它吗?怎样? 2-通常这些操作是如何在javacard中计算的 我找到了一些链接,但我帮不了我: http://stackoverflow.com/questions/15363244/math-library-for-javacard http://javacardos.com/javacardforum/viewtopic

我想在javacard中计算sqrt和反正切。我没有任何数学库来为我做这件事,我也没有浮点类型来手动计算它。我脑子里有一些问题:

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

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


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

如果有整数除法,整数平方根可以通过计算得到

只是重复一下

R' = (R + S / R) / 2
使用合适的首字母
R

这样的值可以通过

R= 1
while S > 2:
  R*= 2
  S/= 4
(如有可能,最好轮班实施)


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

CORDIC在计算
atan
时的想法是建立一个值表

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;
tan(x){
如果(x1)返回2*角度[0]-atan(1/x);
pow2=1.0;
φ=0;
对于(i=0;ipow2){
φ+=角度[i];
x=(x-pow2)/(1+pow2*x);
}
pow2/=2;
}
返回φ+x;

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

输入的具体内容是什么?他们的数据格式是什么,(隐含的)精度等。对结果的期望是什么,它们必须精确到什么程度?你知道手动平方根算法吗?CORDIC算法?谢谢回复。该算法不适用于浮点数据类型吗?我在卡中没有浮动数据类型。这就是为什么我询问输入和输出数据格式的原因。如果你无法获取数据,并且没有结构来输入结果,那么计算的“如何”就变得次要了。实际上,输入数据是细节格式的图片(用于在javacard中存储指纹的格式),输出是浮点格式的分数,表示指纹之间有多相似。我必须计算两张图片上的一些数学运算并计算分数。如果这不是为了学术目的,那么你应该研究现有的产品。这是一个奇怪的CORDIC实现。由于循环中存在分割,因此效率不高。有一个更好的解决方案,只需要添加和转换。是的,这只是写下来,没有检查其他来源。在互联网上搜索可能有足够的二次多项式近似值和一般的CORDIC思想。谢谢你的回答。有没有一种方法可以在字节数组中表示浮点类型并对其进行处理?是的,多精度格式就是这样构造的,比如说Pari,有一整本书都是关于如何用这种方式构建CAS的但就您的目的而言,固定点格式更容易处理。例如,所有数字都是32位的,可以理解为x/2^16。因此,产品将是
(x/2^16)*(y/2^16)=(x*y/2^16)/2^16
等。这也将更适合使用轮班的实现。感谢Lutzl。我测试了一下,会通知你结果的。谢谢你的回答。我还没有在卡片上打字。我是如何通过字节数组实现这个过程的?@MohsenGorgani:我不确定你是否理解我的答案。它使用整数。结果是整数吗?@MohsenGorgani:当然。如果需要,您可以模拟定点。谢谢Yves。让我来测试一下,我会告诉你们结果。