我想在javacard中计算sqrt和arctangent。我没有任何数学库可以为我做这个,我没有浮动类型来手动计算它。我脑子里有一些问题:
1-我可以使用字节数组形式的浮点数并对其进行处理吗?怎么样? 2-通常如何在javacard中计算这些操作?
我找到了一些链接,但我无法帮助我: http://stackoverflow.com/questions/15363244/math-library-for-javacard http://javacardos.com/javacardforum/viewtopic.php?t=437
我应该提一下,我必须在卡上计算这些操作。非常感谢,如果有人可以帮助我。
答案 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;
现在需要将这些操作和常量转换为使用某种定点格式。