資源簡介
用c模擬浮點數硬件除法 有四舍五入及特殊情況分析
代碼片段和文件信息
#include?
typedef?unsigned?short word;
typedef?unsigned?long dwrd;
dwrd?divide(dwrd?xdwrd?y);
union{
????float?f;
????dwrd?i;
}uvwz;
int?main()
{
????for(;;)
????{
????scanf(“%f“?&u.f);
????scanf(“%f“?&v.f);
????printf(“Divident:u:%x\n“u.i);
????printf(“Divisor:v:%x\n“v.i);
????w.i=divide(u.iv.i);
????printf(“fdiv?:??????w:%f\n“w.f);
????printf(“fdiv?:????0xW:%x\n“w.i);
????z.f=u.f/v.f;
????
????printf(“computer:??w1:%f\n“z.f);
????printf(“computer:0xW1:%x\n“z.i);
????printf(“---------?----------\n“);
????}
return?0;
}????????
dwrd?divide(dwrd?xdwrd?y)
{
????dwrd?p=0r=0;
????dwrd?y1nymdc;
????int?st;
????int?i=0j=0k=0;
????d=(?x?&?0x80000000)^(y?&?0x80000000);
????s=x&0x7f800000;??//被除數的階碼?
????t=y&0x7f800000;??//除數的階碼?
????y1=(y|0x800000)<<8;??//被除數的尾數處理?
????y1=y1>>2;?????//防止數位
評論
共有 條評論