📄 units.c
字号:
hp = lookup(d->units_name);
else {
#ifdef DEBUG
printf(" Leaving UnitsSimplify() \n");
#endif
return(d);
}
if(hp != NULL) {
#ifdef DEBUG
printf(" Leaving UnitsSimplify() \n");
#endif
return(d);
}
/* [a] Check weather the units are dimensionless */
else if(d->length_expnt == 0 && d->time_expnt == 0 &&
d->mass_expnt == 0 && d->temp_expnt == 0 ) {
free((char *)d->units_name);
d->units_name = (char *)NULL;
d->scale_factor = 1.0;
#ifdef DEBUG
printf(" Leaving UnitsSimplify() \n");
#endif
return(d);
}
/* [b] Check weather the units are LENGTH units */
if(d->length_expnt != 0 && d->time_expnt == 0 &&
d->mass_expnt == 0 && d->temp_expnt == 0 ) {
if(d->units_type == SI)
dp = DefaultUnits("m");
else
dp = DefaultUnits("in");
if(d->length_expnt == 1) {
if(strcmp(d->units_name, dp->units_name) != 0) {
free((char *) d->units_name);
d->units_name = SaveString(dp->units_name);
d->scale_factor = dp->scale_factor;
}
return(d);
}
else if(d->length_expnt < 0) {
d1 = (DIMENSIONS *)MyCalloc(1,sizeof(DIMENSIONS));
ZeroUnits(d1);
d1->units_type = d->units_type;
if(d->length_expnt == -1) {
UnitsDivRep(d, d1, dp, NO);
}
else {
d2 = UnitsPower( dp, ABS(d->length_expnt), NO );
UnitsDivRep(d, d1, d2, NO);
free((char *) d2->units_name);
free((char *) d2);
}
free((char *) d1->units_name);
free((char *) d1);
}
else
UnitsPowerRep(d, dp, d->length_expnt, NO);
free((char *) dp->units_name);
free((char *) dp);
#ifdef DEBUG
printf(" Leaving UnitsSimplify() \n");
#endif
return(d);
}
/* [c] Check weather the units are MASS units */
if(d->length_expnt == 0 && d->time_expnt == 0 &&
d->mass_expnt != 0 && d->temp_expnt == 0 ) {
if(d->units_type == SI)
dp = DefaultUnits("kg");
else
dp = DefaultUnits("lb");
if(d->mass_expnt == 1) {
if(strcmp(d->units_name, dp->units_name) != 0) {
free((char *) d->units_name);
d->units_name = SaveString(dp->units_name);
d->scale_factor = dp->scale_factor;
}
return(d);
}
else if(d->mass_expnt < 0) {
d1 = (DIMENSIONS *)MyCalloc(1,sizeof(DIMENSIONS));
ZeroUnits(d1);
d1->units_type = d->units_type;
if(d->mass_expnt == -1) {
UnitsDivRep(d, d1, dp, NO);
}
else {
d2 = UnitsPower( dp, ABS(d->mass_expnt), NO );
UnitsDivRep(d, d1, d2, NO);
free((char *) d2->units_name);
free((char *) d2);
}
free((char *) d1->units_name);
free((char *) d1);
}
else
UnitsPowerRep(d, dp, d->mass_expnt, NO);
free((char *) dp->units_name);
free((char *) dp);
#ifdef DEBUG
printf(" Leaving UnitsSimplify() \n");
#endif
return(d);
}
/* [d] Check weather the units are TIME units */
if(d->length_expnt == 0 && d->time_expnt != 0 &&
d->mass_expnt == 0 && d->temp_expnt == 0 ) {
dp = DefaultUnits("sec");
if(d->time_expnt == 1) {
if(strcmp(d->units_name, dp->units_name) != 0) {
free((char *) d->units_name);
d->units_name = SaveString(dp->units_name);
d->scale_factor = dp->scale_factor;
}
return(d);
}
else if(d->time_expnt < 0) {
d1 = (DIMENSIONS *)MyCalloc(1,sizeof(DIMENSIONS));
ZeroUnits(d1);
d1->units_type = SI_US;
if(d->time_expnt == -1) {
UnitsDivRep(d, d1, dp, NO);
}
else {
d2 = UnitsPower( dp, ABS(d->time_expnt), NO );
UnitsDivRep(d, d1, d2, NO);
free((char *) d2->units_name);
free((char *) d2);
}
free((char *) d1->units_name);
free((char *) d1);
}
else
UnitsPowerRep(d, dp, d->time_expnt, NO);
free((char *) dp->units_name);
free((char *) dp);
#ifdef DEBUG
printf(" Leaving UnitsSimplify() \n");
#endif
return(d);
}
/* [e] Check weather the units are TEMPERATURE units */
if(d->length_expnt == 0 && d->time_expnt == 0 &&
d->mass_expnt == 0 && d->temp_expnt != 0 ) {
if(d->units_type == SI)
dp = DefaultUnits("deg_C");
else
dp = DefaultUnits("deg_F");
if(d->temp_expnt == 1) {
if(strcmp(d->units_name, dp->units_name) != 0) {
free((char *) d->units_name);
d->units_name = SaveString(dp->units_name);
d->scale_factor = dp->scale_factor;
}
return(d);
}
else if(d->temp_expnt < 0) {
d1 = (DIMENSIONS *)MyCalloc(1,sizeof(DIMENSIONS));
ZeroUnits(d1);
d1->units_type = d->units_type;
if(d->temp_expnt == -1) {
UnitsDivRep(d, d1, dp, NO);
}
else {
d2 = UnitsPower( dp, ABS(d->temp_expnt), NO );
UnitsDivRep(d, d1, d2, NO);
free((char *) d2->units_name);
free((char *) d2);
}
free((char *) d1->units_name);
free((char *) d1);
}
else
UnitsPowerRep(d, dp, d->temp_expnt, NO);
free((char *) dp->units_name);
free((char *) dp);
return(d);
#ifdef DEBUG
printf(" Leaving UnitsSimplify() \n");
#endif
}
/* [f] Check weather the units are only two units related */
/* [f.1] Check weather the units are Length and Mass 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("m");
dp2 = DefaultUnits("kg");
}
else {
dp1 = DefaultUnits("in");
dp2 = DefaultUnits("lb");
}
if(ABS(d->length_expnt) == 1) {
d1 = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));
UnitsCopy(d1,dp1);
}
else
d1 = UnitsPower( dp1, ABS(d->length_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->length_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->length_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.2] Check weather the units are Length and Time 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("m");
dp2 = DefaultUnits("sec");
}
else {
dp1 = DefaultUnits("in");
dp2 = DefaultUnits("sec");
}
if(ABS(d->length_expnt) == 1) {
d1 = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));
UnitsCopy(d1,dp1);
}
else
d1 = UnitsPower( dp1, ABS(d->length_expnt), NO );
if(ABS(d->time_expnt) == 1) {
d2 = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));
UnitsCopy(d2,dp2);
}
else
d2 = UnitsPower( dp2, ABS(d->time_expnt), NO );
if(d->length_expnt > 0) {
if(d->time_expnt > 0)
UnitsMultRep(d, d1, d2);
else
UnitsDivRep(d, d1, d2, NO);
}
else if(d->time_expnt > 0) {
UnitsDivRep(d, d2, d1, NO);
}
else {
dd1 = UnitsPower( dp1, d->length_expnt, NO );
dd2 = UnitsPower( dp2, d->time_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.3] Check weather the units are Length 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("m");
dp2 = DefaultUnits("deg_C");
}
else {
dp1 = DefaultUnits("in");
dp2 = DefaultUnits("deg_F");
}
if(ABS(d->length_expnt) == 1) {
d1 = (DIMENSIONS *) MyCalloc(1,sizeof(DIMENSIONS));
UnitsCopy(d1,dp1);
}
else
d1 = UnitsPower( dp1, ABS(d->length_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->length_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->length_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.4] Check weather the units are Time and Mass related */
/* [f.4.a] Check weather the units are FORCE/LENGTH units */
else if(d->length_expnt == 0 && d->time_expnt == -2 &&
d->mass_expnt == 1 && d->temp_expnt == 0 ) {
if(d->units_type == SI){
d1 = DefaultUnits("N");
d2 = DefaultUnits("m");
}
else{
d1 = DefaultUnits("lbf");
d2 = DefaultUnits("in");
}
UnitsDivRep(d, d1, d2, NO);
free((char *) d1->units_name);
free((char *) d1);
free((char *) d2->units_name);
free((char *) d2);
#ifdef DEBUG
printf(" Leaving UnitsSimplify() \n");
#endif
return(d);
}
/* [f.4] Check weather the units are Time and Mass related */
/* [f.4.b] Check weather the units are LENGTH/FORCE units */
else if(d->length_expnt == 0 && d->time_expnt == 2 &&
d->mass_expnt == -1 && d->temp_expnt == 0 ) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -