📄 units.c
字号:
dp2 = DefaultUnits("kg"); } else { dp1 = DefaultUnits("sec"); dp2 = DefaultUnits("lb"); } if(ABS(d->time_expnt) == 1) { d1 = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS)); UnitsCopy(d1,dp1); } else d1 = UnitsPower( dp1, ABS(d->time_expnt), NO ); if(ABS(d->mass_expnt) == 1) { d2 = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS)); UnitsCopy(d2,dp2); } else d2 = UnitsPower( dp2, ABS(d->mass_expnt), NO ); if(d->time_expnt > 0) { if(d->mass_expnt > 0) UnitsMultRep(d, d1, d2); else UnitsDivRep(d, d1, d2, NO); } else if(d->mass_expnt > 0) { UnitsDivRep(d, d2, d1, NO); } else { dd1 = UnitsPower( dp1, d->time_expnt, NO ); dd2 = UnitsPower( dp2, d->mass_expnt, NO ); UnitsMultRep(d, dd1, dd2); free((char *) dd1->units_name); free((char *) dd1); free((char *) dd2->units_name); free((char *) dd2); } free((char *) d1->units_name); free((char *) d1); free((char *) d2->units_name); free((char *) d2); free((char *) dp1->units_name); free((char *) dp1); free((char *) dp2->units_name); free((char *) dp2);#ifdef DEBUG printf(" Leaving UnitsSimplify() \n");#endif return(d); } /* [f.5] Check weather the units are Time and Temperature related */ else if(d->length_expnt == 0 && d->time_expnt != 0 && d->mass_expnt == 0 && d->temp_expnt != 0 ) { if(d->units_type == SI) { dp1 = DefaultUnits("sec"); dp2 = DefaultUnits("deg_C"); } else { dp1 = DefaultUnits("sec"); dp2 = DefaultUnits("deg_F"); } if(ABS(d->time_expnt) == 1) { d1 = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS)); UnitsCopy(d1,dp1); } else d1 = UnitsPower( dp1, ABS(d->time_expnt), NO ); if(ABS(d->temp_expnt) == 1) { d2 = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS)); UnitsCopy(d2,dp2); } else d2 = UnitsPower( dp2, ABS(d->temp_expnt), NO ); if(d->time_expnt > 0) { if(d->temp_expnt > 0) UnitsMultRep(d, d1, d2); else UnitsDivRep(d, d1, d2, NO); } else if(d->temp_expnt > 0) { UnitsDivRep(d, d2, d1, NO); } else { dd1 = UnitsPower( dp1, d->time_expnt, NO ); dd2 = UnitsPower( dp2, d->temp_expnt, NO ); UnitsMultRep(d, dd1, dd2); free((char *) dd1->units_name); free((char *) dd1); free((char *) dd2->units_name); free((char *) dd2); } free((char *) d1->units_name); free((char *) d1); free((char *) d2->units_name); free((char *) d2); free((char *) dp1->units_name); free((char *) dp1); free((char *) dp2->units_name); free((char *) dp2);#ifdef DEBUG printf(" Leaving UnitsSimplify() \n");#endif return(d); } /* [f.6] Check weather the units are Mass and Temperature related */ else if(d->length_expnt == 0 && d->time_expnt == 0 && d->mass_expnt != 0 && d->temp_expnt != 0 ) { if(d->units_type == SI) { dp1 = DefaultUnits("kg"); dp2 = DefaultUnits("deg_C"); } else { dp1 = DefaultUnits("lb"); dp2 = DefaultUnits("deg_F"); } if(ABS(d->mass_expnt) == 1) { d1 = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS)); UnitsCopy(d1,dp1); } else d1 = UnitsPower( dp1, ABS(d->mass_expnt), NO ); if(ABS(d->temp_expnt) == 1) { d2 = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS)); UnitsCopy(d2,dp2); } else d2 = UnitsPower( dp2, ABS(d->temp_expnt), NO ); if(d->mass_expnt > 0) { if(d->temp_expnt > 0) UnitsMultRep(d, d1, d2); else UnitsDivRep(d, d1, d2, NO); } else if(d->temp_expnt > 0) { UnitsDivRep(d, d2, d1, NO); } else { dd1 = UnitsPower( dp1, d->mass_expnt, NO ); dd2 = UnitsPower( dp2, d->temp_expnt, NO ); UnitsMultRep(d, dd1, dd2); free((char *) dd1->units_name); free((char *) dd1); free((char *) dd2->units_name); free((char *) dd2); } free((char *) d1->units_name); free((char *) d1); free((char *) d2->units_name); free((char *) d2); free((char *) dp1->units_name); free((char *) dp1); free((char *) dp2->units_name); free((char *) dp2);#ifdef DEBUG printf(" Leaving UnitsSimplify() \n");#endif return(d); } /* [g] Check weather the units are three units related */ /* [g.a] Check weather the units are PRESSURE units */ else if(d->length_expnt == -1 && d->time_expnt == -2 && d->mass_expnt == 1 && d->temp_expnt == 0 ) { if(d->units_type == SI){ if(strcmp(d->units_name, "Pa") != 0) { dp = DefaultUnits("Pa"); UnitsCopy(d,dp); free((char *) dp->units_name); free((char *) dp); } } else{ if(strcmp(d->units_name, "psi") != 0) { dp = DefaultUnits("psi"); UnitsCopy(d,dp); free((char *) dp->units_name); free((char *) dp); } }#ifdef DEBUG printf(" Leaving UnitsSimplify() \n");#endif return(d); } /* [g.b] Check weather the units are POWER units */ else if(d->length_expnt == 2 && d->time_expnt == -3 && d->mass_expnt == 1 && d->temp_expnt == 0 ) { if(strcmp(d->units_name, "Watt") != 0) { dp = DefaultUnits("Watt"); UnitsCopy(d,dp); free((char *) dp->units_name); free((char *) dp); }#ifdef DEBUG printf(" Leaving UnitsSimplify() \n");#endif return(d); } /* [g.c] Check weather the units are FORCE related units */ else if(d->length_expnt != 0 && d->time_expnt != 0 && d->mass_expnt != 0 && d->temp_expnt == 0 ) { dlength = d->length_expnt - d->mass_expnt; if( d->time_expnt/-2.0 == d->mass_expnt ) { if(d->units_type == SI){ dp1 = DefaultUnits("N"); dp2 = DefaultUnits("m"); } else { dp1 = DefaultUnits("lbf"); dp2 = DefaultUnits("in"); } if(ABS(d->mass_expnt) == 1) { d1 = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS)); UnitsCopy(d1,dp1); } else d1 = UnitsPower( dp1, ABS(d->mass_expnt), NO ); if(dlength == 0) { d2 = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS)); ZeroUnits(d2); d2->units_type = dp2->units_type; } else if(ABS(dlength) == 1) { d2 = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS)); UnitsCopy(d2,dp2); } else d2 = UnitsPower( dp2, ABS(dlength), NO ); if(d->mass_expnt > 0) { if(dlength > 0) UnitsMultRep(d, d1, d2); else if(dlength == 0) UnitsCopy(d,d1); else UnitsDivRep(d, d1, d2, NO); } else if(dlength >= 0) { UnitsDivRep(d, d2, d1, NO); } else { dd1 = UnitsPower( dp1, d->mass_expnt, NO ); dd2 = UnitsPower( dp2, dlength, NO ); UnitsMultRep(d, dd1, dd2); free((char *) dd1->units_name); free((char *) dd1); free((char *) dd2->units_name); free((char *) dd2); } free((char *)d1->units_name); free((char *)d1); free((char *)d2->units_name); free((char *)d2); free((char *)dp1->units_name); free((char *)dp1); free((char *)dp2->units_name); free((char *)dp2); } else { if(d->units_type == SI) { dp1 = DefaultUnits("m"); dp2 = DefaultUnits("kg"); dp3 = DefaultUnits("sec"); } else { dp1 = DefaultUnits("in"); dp2 = DefaultUnits("lb"); dp3 = DefaultUnits("sec"); } if( d->length_expnt==1 ) { d1 = (DIMENSIONS *)MyCalloc(1,sizeof(DIMENSIONS)); UnitsCopy(d1,dp1); } else d1 = UnitsPower(dp1,d->length_expnt, NO); if( d->mass_expnt==1 ) { d2 = (DIMENSIONS *)MyCalloc(1,sizeof(DIMENSIONS)); UnitsCopy(d2,dp2); } else d2 = UnitsPower(dp2,d->mass_expnt, NO); if( d->time_expnt==1 ) { d3 = (DIMENSIONS *)MyCalloc(1,sizeof(DIMENSIONS)); UnitsCopy(d3,dp3); } else d3 = UnitsPower(dp3,d->time_expnt, NO); dd1 = UnitsMult(d1,d2); UnitsMultRep(d,dd1,d3); free((char *)d1->units_name); free((char *)d1); free((char *)d2->units_name); free((char *)d2); free((char *)d3->units_name); free((char *)d3); free((char *)dp1->units_name); free((char *)dp1); free((char *)dp2->units_name); free((char *)dp2); free((char *)dp3->units_name); free((char *)dp3); free((char *)dd1->units_name); free((char *)dd1); }#ifdef DEBUG printf(" Leaving UnitsSimplify() \n");#endif return(d); } /* [h] Check weather the units are some compact form */ else { if(d->units_type == SI) { dp1 = DefaultUnits("m"); dp2 = DefaultUnits("kg"); dp3 = DefaultUnits("sec"); dp4 = DefaultUnits("deg_C"); } else { dp1 = DefaultUnits("in"); dp2 = DefaultUnits("lb"); dp3 = DefaultUnits("sec"); dp4 = DefaultUnits("deg_F"); } if( d->length_expnt!=0 ) { if( d->length_expnt==1 ) { d1 = (DIMENSIONS *)MyCalloc(1,sizeof(DIMENSIONS)); UnitsCopy(d1,dp1); } else d1 = UnitsPower(dp1,d->length_expnt, NO); } else { d1 = (DIMENSIONS *)MyCalloc(1,sizeof(DIMENSIONS)); ZeroUnits(d1); d1->units_type = SI_US; } if( d->mass_expnt!=0 ) { if( d->mass_expnt==1 ) { d2 = (DIMENSIONS *)MyCalloc(1,sizeof(DIMENSIONS)); UnitsCopy(d2,dp2); } else d2 = UnitsPower(dp2,d->mass_expnt, NO); } else { d2 = (DIMENSIONS *)MyCalloc(1,sizeof(DIMENSIONS)); ZeroUnits(d2); d2->units_type = SI_US; } if( d->time_expnt!=0 ) { if( d->time_expnt==1 ) { d3 = (DIMENSIONS *)MyCalloc(1,sizeof(DIMENSIONS)); UnitsCopy(d3,dp3); } else d3 = UnitsPower(dp3,d->time_expnt, NO); } else { d3 = (DIMENSIONS *)MyCalloc(1,sizeof(DIMENSIONS)); ZeroUnits(d3); d3->units_type = SI_US; } if( d->temp_expnt!=0 ) { if( d->temp_expnt==1 ) { d4 = (DIMENSIONS *)MyCalloc(1,sizeof(DIMENSIONS)); UnitsCopy(d4,dp4); } else d4 = UnitsPower(dp4,d->temp_expnt, NO); } else { d4 = (DIMENSIONS *)MyCalloc(1,sizeof(DIMENSIONS)); ZeroUnits(d4); d4->units_type = SI_US; } dd1 = UnitsMult(d1,d2); dd2 = UnitsMult(d3,d4); UnitsMultRep(d,dd1,dd2); free((char *)d1->units_name); free((char *)d1); free((char *)d2->units_name); free((char *)d2); free((char *)d3->units_name); free((char *)d3); free((char *)d4->units_name); free((char *)d4); free((char *)dp1->units_name);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -