On 2/24/13 9:19 AM, Luc Maisonobe wrote:
> Hi Phil,
>
> Le 24/02/2013 18:03, Phil Steitz a écrit :
>> On 2/24/13 1:42 AM, Luc Maisonobe wrote:
>>> Hi all,
>>>
>>> I would like to go back to some discussions we had a while ago: adding
>>> some operations on FieldElement. There was one discussion on the dev
>>> list one year ago (see
>>> <http://commons.markmail.org/thread/lokbafadi2uwin2n>) and a JIRA issue
>>> two years ago (see <https://issues.apache.org/jira/browse/MATH-569>).
>>>
>>> Since that time, we have added at least one new Field/FieldElement
>>> implementation: DerivativeStructure. This one has the same domain of
>>> definition as Dfp, i.e. it mimics real numbers only. It already does
>>> implement all operations, including sqrt (returning NaNs when applied to
>>> negative numbers for example).
>>>
>>> I already needs this kind of objects for 3D vectors and rotations. You
>>> may have noticed I implemented them specifically for
>>> DerivativeStructure, but I think it would make more sense to implemenbt
>>> it as Vector3D<T extend ExtendedField> so we could have both an
>>> implementation using DerivativeStructure and an implementation using Dfp.
>>>
>>> In fact, I think we could later on even add the missing methods to the
>>> Complex class so it could also implement this interface, which would be
>>> closer to the other needs that appeared at least twice on the project.
>>>
>>> At the time the issues were raised, it seems we decided to not implement
>>> this because of lack of time and lack of complete use cases among
>>> Complex. Now we have at least another use case (geometry needs for me),
>>> and most of the work is already available (implementation of these
>>> geometry needs for DerivativeStructure only, with a full test suite with
>>> 100% line coverage). So It may be worth extracting the interface from
>>> DerivativeStructure. After that, adding the methods to the other Field
>>> classes could be done progressively (Dfp would be the first one to
>>> follow, and would be quite simple as almost everything is already
>>> available in the companion class DfpMath).
>>>
>>> What do you think?
>> I am OK with this as long as the new thing is called
>> "ExtendedField."   I assume that the real additions you are talking
>> about are pow and sqrt.  The first really says the field is
>> exponentially closed and the second is part of algebraic closure. 
>> Two things we might think about, which don't appear to be required
>> by immediate applications are:
>>
>> 0) for pow, add exp (and inverse) explicitly.  Call the result of
>> this addition ExponentialField.
>> 1) for sqrt, generalize to nth roots or even go all the way to
>> algebraic closure, yielding AlgebraicallyClosedField.
>>
>> Looking at Complex as a use case, nth roots would definitely be more
>> useful than just sqrt.  Extending solvers to handle complex
>> polynomials would be a fair amount of work, so I would say hold off
>> on AlgebraicallyClosedField until we have use cases (and patches)
>> for that.  I can't think of immediate uses for ExponentialField by
>> itself for now, so I would also hold off on that and just do
>> ExtendedField.
>>
>> Therefore, I am +1 for ExtendedField, adding pow, exp, ln (or maybe
>> expInverse), root(int n) or nthRoot  (would this be hard in
>> DerivativeStructure?).  If it is too much work / seems unnecessary
>> to add anything beyond pow, sqrt, I am OK with adding just these to
>> the interface as well.
> Well, I already have all methods: exp, expm1, log, log1p, sin, cos, tan,
> asin, acos, atan, atan2, the hyperbolic counterparts, pow with different
> types like double and int, linear combinations ... In my use case, I
> really need the trigonometric functions.
>
> I have added the necessary methods so that Decimal64, Dfp and
> DerivativeStructures implement the interface. One caveat was that Dfp
> already had a log10 method that returned an int, which was incompatible
> with returning a ExtendedField. So I changed the name original method of
> Dfp to be intlog10. This is an incompatibility, but I don't think it
> will create any problem so I think we could accept it.
>
> I have also replaced my recent Vector3DDS and RotationDS with
> FieldVector3D<ExtendedField> and Rotation<ExtendedField>. Everything
> runs smoothly.
>
> I propose to commit what I have in my workspace so we can review it
> together and see how we split the interface into the layers you propose,
> as I'm not sure I understand the global layout you think about.
> Splitting an interface in several layers is trivial.

+1 to commit what you have so we have something concrete to talk
about.  The reason I suggested just exp/ln is that this is what
*defines* pow and exp is really what makes the exponential field.

Phil
>
> best regards,
> Luc
>
>> Phil
>>
>>
>>
>>> Luc
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>>> For additional commands, e-mail: dev-h...@commons.apache.org
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>> For additional commands, e-mail: dev-h...@commons.apache.org
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> For additional commands, e-mail: dev-h...@commons.apache.org
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to