在没有浮点类型的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;
现在需要将这些操作和常量转换为使用某种定点格式。
我想在 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;
现在需要将这些操作和常量转换为使用某种定点格式。