#define NotEqualOperator 0xfa
#define LogicalAndOperator 0xfb
#define LogicalOrOperator 0xfc
+#define ExponentialNotation 0xfd
struct _FxInfo
{
(strstr(fx_info->expression,"e-") != (char *) NULL))
{
/*
- Convert scientific notation. '*' and '/' have the same precedence so
- 2e+6/1e+5 fails, instead use '@' to ensure proper results.
+ Convert scientific notation.
*/
- (void) SubstituteString(&fx_info->expression,"0e+","0@10^");
- (void) SubstituteString(&fx_info->expression,"1e+","1@10^");
- (void) SubstituteString(&fx_info->expression,"2e+","2@10^");
- (void) SubstituteString(&fx_info->expression,"3e+","3@10^");
- (void) SubstituteString(&fx_info->expression,"4e+","4@10^");
- (void) SubstituteString(&fx_info->expression,"5e+","5@10^");
- (void) SubstituteString(&fx_info->expression,"6e+","6@10^");
- (void) SubstituteString(&fx_info->expression,"7e+","7@10^");
- (void) SubstituteString(&fx_info->expression,"8e+","8@10^");
- (void) SubstituteString(&fx_info->expression,"9e+","9@10^");
- (void) SubstituteString(&fx_info->expression,"0e-","0@10^-");
- (void) SubstituteString(&fx_info->expression,"1e-","1@10^-");
- (void) SubstituteString(&fx_info->expression,"2e-","2@10^-");
- (void) SubstituteString(&fx_info->expression,"3e-","3@10^-");
- (void) SubstituteString(&fx_info->expression,"4e-","4@10^-");
- (void) SubstituteString(&fx_info->expression,"5e-","5@10^-");
- (void) SubstituteString(&fx_info->expression,"6e-","6@10^-");
- (void) SubstituteString(&fx_info->expression,"7e-","7@10^-");
- (void) SubstituteString(&fx_info->expression,"8e-","8@10^-");
- (void) SubstituteString(&fx_info->expression,"9e-","9@10^-");
+ (void) SubstituteString(&fx_info->expression,"0e+","0**10^");
+ (void) SubstituteString(&fx_info->expression,"1e+","1**10^");
+ (void) SubstituteString(&fx_info->expression,"2e+","2**10^");
+ (void) SubstituteString(&fx_info->expression,"3e+","3**10^");
+ (void) SubstituteString(&fx_info->expression,"4e+","4**10^");
+ (void) SubstituteString(&fx_info->expression,"5e+","5**10^");
+ (void) SubstituteString(&fx_info->expression,"6e+","6**10^");
+ (void) SubstituteString(&fx_info->expression,"7e+","7**10^");
+ (void) SubstituteString(&fx_info->expression,"8e+","8**10^");
+ (void) SubstituteString(&fx_info->expression,"9e+","9**10^");
+ (void) SubstituteString(&fx_info->expression,"0e-","0**10^-");
+ (void) SubstituteString(&fx_info->expression,"1e-","1**10^-");
+ (void) SubstituteString(&fx_info->expression,"2e-","2**10^-");
+ (void) SubstituteString(&fx_info->expression,"3e-","3**10^-");
+ (void) SubstituteString(&fx_info->expression,"4e-","4**10^-");
+ (void) SubstituteString(&fx_info->expression,"5e-","5**10^-");
+ (void) SubstituteString(&fx_info->expression,"6e-","6**10^-");
+ (void) SubstituteString(&fx_info->expression,"7e-","7**10^-");
+ (void) SubstituteString(&fx_info->expression,"8e-","8**10^-");
+ (void) SubstituteString(&fx_info->expression,"9e-","9**10^-");
}
/*
Convert complex to simple operators.
(void) SubstituteString(&fx_info->expression,"&&",fx_op);
*fx_op=(char) LogicalOrOperator;
(void) SubstituteString(&fx_info->expression,"||",fx_op);
+ *fx_op=(char) ExponentialNotation;
+ (void) SubstituteString(&fx_info->expression,"**",fx_op);
return(fx_info);
}
\f
NullPrecedence,
BitwiseComplementPrecedence,
ExponentPrecedence,
+ ExponentialNotationPrecedence,
MultiplyPrecedence,
AdditionPrecedence,
ShiftPrecedence,
precedence=LogicalOrPrecedence;
break;
}
+ case ExponentialNotation:
+ {
+ precedence=ExponentialNotationPrecedence;
+ break;
+ }
case ':':
case '?':
{
return(*beta);
}
case '*':
- case '@':
+ case ExponentialNotation:
{
*beta=FxEvaluateSubexpression(fx_info,channel,x,y,++p,beta,exception);
return(alpha*(*beta));