diff --git a/ChangeLog b/ChangeLog
index 80cbfef..53dfb9f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2010-08-12 6.6.3-5 Cristy <quetzlzacatenango@image...>
+ * The -fx 2e+6/1e+5 argument no longer returns the wrong results (reference
+ http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=16833).
+
2010-08-10 6.6.3-5 Glenn Randers-Pehrson <glennrp@image...>
* Emit a warning if the PNG encoder can't satisfy the color type and
bit depth requested with a "-define" directive.
diff --git a/magick/fx.c b/magick/fx.c
index a4b417d..fcf4a1f 100644
--- a/magick/fx.c
+++ b/magick/fx.c
@@ -98,6 +98,7 @@
#define NotEqualOperator 0xfa
#define LogicalAndOperator 0xfb
#define LogicalOrOperator 0xfc
+#define ExponentialNotation 0xfd
struct _FxInfo
{
@@ -190,29 +191,28 @@
(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.
@@ -234,6 +234,8 @@
(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);
}
@@ -1852,6 +1854,7 @@
NullPrecedence,
BitwiseComplementPrecedence,
ExponentPrecedence,
+ ExponentialNotationPrecedence,
MultiplyPrecedence,
AdditionPrecedence,
ShiftPrecedence,
@@ -2011,6 +2014,11 @@
precedence=LogicalOrPrecedence;
break;
}
+ case ExponentialNotation:
+ {
+ precedence=ExponentialNotationPrecedence;
+ break;
+ }
case ':':
case '?':
{
@@ -2116,7 +2124,7 @@
return(*beta);
}
case '*':
- case '@':
+ case ExponentialNotation:
{
*beta=FxEvaluateSubexpression(fx_info,channel,x,y,++p,beta,exception);
return(alpha*(*beta));