微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 第65节:大数据的除法运算

第65节:大数据的除法运算

时间:11-22 来源:互联网 点击:

  1. Result;
  2. }
  3. else//开始猜值
  4. {
  5. resultRunStep=5;//先猜是5,从这里开始直接看以下 case 5 的详细讲解,其他case原理相同
  6. while_flag=0;
  7. while(1)
  8. {
  9. switch(resultRunStep)
  10. {
  11. case 1:
  12. ClearAllData(BCD8_MAX,DivLessTenArrayTemp);
  13. ClearAllData(BCD8_MAX,DivLessTenArrayResult);
  14. DivLessTenArrayTemp[0]=resultRunStep;
  15. multError=MultData(sourceData,DivLessTenArrayTemp,DivLessTenArrayResult);
  16. subError=SubData(destData,DivLessTenArrayResult,remData);//求余数
  17. *resultData=1; //商等于1
  18. while_flag=1; //退出循环
  19. break;
  20. case 2:
  21. ClearAllData(BCD8_MAX,DivLessTenArrayTemp);
  22. ClearAllData(BCD8_MAX,DivLessTenArrayResult);
  23. DivLessTenArrayTemp[0]=resultRunStep;
  24. multError=MultData(sourceData,DivLessTenArrayTemp,DivLessTenArrayResult);
  25. cmpError=CmpData(DivLessTenArrayResult,destData);
  26. if(cmpError==10) //等于
  27. {
  28. *resultData=2; //商等于2余数为0
  29. while_flag=1; //退出循环
  30. }
  31. else if(cmpError==11) //大于
  32. {
  33. resultRunStep=1;
  34. }
  35. else //小于
  36. {
  37. subError=SubData(destData,DivLessTenArrayResult,remData);//求余数
  38. *resultData=2; //商等于2
  39. while_flag=1; //退出循环
  40. }
  41. break;
  42. case 3:
  43. ClearAllData(BCD8_MAX,DivLessTenArrayTemp);
  44. ClearAllData(BCD8_MAX,DivLessTenArrayResult);
  45. DivLessTenArrayTemp[0]=resultRunStep;
  46. multError=MultData(sourceData,DivLessTenArrayTemp,DivLessTenArrayResult);
  47. cmpError=CmpData(DivLessTenArrayResult,destData);
  48. if(cmpError==10) //等于
  49. {
  50. *resultData=3; //商等于3余数为0
  51. while_flag=1; //退出循环
  52. }
  53. else if(cmpError==11) //大于
  54. {
  55. resultRunStep=2;
  56. }
  57. else //小于
  58. {
  59. resultRunStep=4;
  60. ClearAllData(BCD8_MAX,DivLessTenArrayBackup);
  61. for(i=0;i
  62. {
  63. DivLessTenArrayBackup[i]=DivLessTenArrayResult[i];
  64. }
  65. }
  66. break;
  67. case 4:
  68. ClearAllData(BCD8_MAX,DivLessTenArrayTemp);
  69. ClearAllData(BCD8_MAX,DivLessTenArrayResult);
  70. DivLessTenArrayTemp[0]=resultRunStep;
  71. multError=MultData(sourceData,DivLessTenArrayTemp,DivLessTenArrayResult);
  72. cmpError=CmpData(DivLessTenArrayResult,destData);
  73. if(cmpError==10) //等于
  74. {
  75. *resultData=4; //商等于4余数为0
  76. while_flag=1; //退出循环
  77. }
  78. else if(cmpError==11) //大于
  79. {
  80. subError=SubData(destData,DivLessTenArrayBackup,remData);//求余数
  81. *resultData=3; //商等于3
  82. while_flag=1; //退出循环
  83. }
  84. else //小于
  85. {
  86. subError=SubData(destData,DivLessTenArrayResult,remData);//求余数
  87. *resultData=4; //商等于4
  88. while_flag=1; //退出循环
  89. }
  90. break;
  91. case 5: //重点讲解一下case 5,其它case 原理相同,不多讲
  92. ClearAllData(BCD8_MAX,DivLessTenArrayTemp); //清空运算中需要用到的中间数组变量
  93. ClearAllData(BCD8_MAX,DivLessTenArrayResult); //清空运算中需要用到的中间数组变量
  94. DivLessTenArrayTemp[0]=resultRunStep;//把猜的变量形式的商传递给数组形式的变量
  95. multError=MultData(sourceData,DivLessTenArrayTemp,DivLessTenArrayResult);//猜的商跟除数像乘,看看结果跟被除数谁大。
  96. cmpError=CmpData(DivLessTenArrayResult,destData); //猜的商跟除数像乘,看看结果跟被除数谁大。
  97. if(cmpError==10) //等于 恭喜猜中是5
  98. {
  99. *resultData=5; //商等于5余数为0
  100. while_flag=1; //退出循环

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top