You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I am trying to use the library to parse and the execute some math channels in my C# project. It works very well, but I receive an "not supported" exception which is very slow.
Having looked into the equation and data I have isolated it to effectively a sqrt(1/0) call that is causing the exception. fpower in the Evaluate module is being used for the division. This is returning PosInf for the 1/0 call and then this is not matched for the sqrt call.
I have found two options for how to remove the exception:
modify the Evaluate to return Undef if a divide by zero is found.
modify the Evaluate to handle PosInf as a match case
For my immediate problem, I have modified the fpower as below with both options, which allows my codes to run without any exceptions being raised
let fpower u v =
match u, v with
| Real x, Real y when x < 0.0 && (y%1.0 <> 0.0) -> Complex (Complex.pow (complex y 0.0) (complex x 0.0))
| Real x, Real y when x = 0.0 && y < 0 -> Undef
| Real x, Real y -> Real (Math.Pow(x, y))
| Complex x, Real y -> Complex (Complex.pow (complex y 0.0) x)
| Real x, Complex y -> Complex (Complex.pow y (complex x 0.0))
| Complex x, Complex y -> Complex (Complex.pow y x)
| Undef, _ | _, Undef -> Undef
| ComplexInf, Infinity | Infinity, ComplexInf -> ComplexInf
| Infinity, PosInf -> ComplexInf
| Infinity, NegInf -> Real (0.0)
| PosInf, _ | _, PosInf -> PosInf
| NegInf, _ | _, NegInf -> NegInf
| _ -> failwith "not supported"
I do not know enough about the library ( or maths...) to understand if this is a valid thing to do though. It certainly works for my use-case.
What is the preferred method of handling divide by zero (undefined or infinity)? What should be the sqrt(PosInf)? I would guess its still PosInf.
The text was updated successfully, but these errors were encountered:
Hi,
I am trying to use the library to parse and the execute some math channels in my C# project. It works very well, but I receive an "not supported" exception which is very slow.
Having looked into the equation and data I have isolated it to effectively a sqrt(1/0) call that is causing the exception.
fpower in the Evaluate module is being used for the division. This is returning PosInf for the 1/0 call and then this is not matched for the sqrt call.
I have found two options for how to remove the exception:
For my immediate problem, I have modified the fpower as below with both options, which allows my codes to run without any exceptions being raised
I do not know enough about the library ( or maths...) to understand if this is a valid thing to do though. It certainly works for my use-case.
What is the preferred method of handling divide by zero (undefined or infinity)? What should be the sqrt(PosInf)? I would guess its still PosInf.
The text was updated successfully, but these errors were encountered: