digitalmars.D.bugs - [Issue 2636] New: std.math.pow should be a template
- d-bugmail puremagic.com (28/28) Jan 30 2009 http://d.puremagic.com/issues/show_bug.cgi?id=2636
- d-bugmail puremagic.com (10/31) Jan 30 2009 http://d.puremagic.com/issues/show_bug.cgi?id=2636
- d-bugmail puremagic.com (11/19) Jan 30 2009 http://d.puremagic.com/issues/show_bug.cgi?id=2636
- d-bugmail puremagic.com (15/15) Jan 31 2009 http://d.puremagic.com/issues/show_bug.cgi?id=2636
- d-bugmail puremagic.com (11/11) Feb 18 2010 http://d.puremagic.com/issues/show_bug.cgi?id=2636
- d-bugmail puremagic.com (8/10) Feb 21 2010 http://d.puremagic.com/issues/show_bug.cgi?id=2636
- d-bugmail puremagic.com (6/6) Feb 21 2010 http://d.puremagic.com/issues/show_bug.cgi?id=2636
- d-bugmail puremagic.com (11/11) Feb 22 2010 http://d.puremagic.com/issues/show_bug.cgi?id=2636
- d-bugmail puremagic.com (12/12) Jun 13 2010 http://d.puremagic.com/issues/show_bug.cgi?id=2636
http://d.puremagic.com/issues/show_bug.cgi?id=2636
           Summary: std.math.pow should be a template
           Product: D
           Version: 1.039
          Platform: PC
        OS/Version: All
            Status: NEW
          Severity: enhancement
          Priority: P2
         Component: Phobos
        AssignedTo: clugdbug yahoo.com.au
        ReportedBy: schveiguy yahoo.com
Currently, pow is an overloaded function, which always takes real as the first
argument.
However, real isn't a common variable type, so passing something that can be
implicitly casted to real results in a compiler overload resolution error.
This problem could be solved by implementing pow as a wrapper to the original
function (named e.g. _pow):
real pow(T, U)(T t, U u)
{
   return _pow(cast(real)t, u);
}
This should take care of cases where you try to pass a double, int, or even
possibly a custom struct that supports an opCast to real.
I'm not sure if casts are needed for the second argument, if they are, special
care should be taken to not cast integral types to real, as the integer
versions are optimized for that.
-- 
 Jan 30 2009
http://d.puremagic.com/issues/show_bug.cgi?id=2636
 Currently, pow is an overloaded function, which always takes real as the first
 argument.
 
 However, real isn't a common variable type, so passing something that can be
 implicitly casted to real results in a compiler overload resolution error.
 
 This problem could be solved by implementing pow as a wrapper to the original
 function (named e.g. _pow):
 
 real pow(T, U)(T t, U u)
 {
    return _pow(cast(real)t, u);
 }
 
 This should take care of cases where you try to pass a double, int, or even
 possibly a custom struct that supports an opCast to real.
 
 I'm not sure if casts are needed for the second argument, if they are, special
 care should be taken to not cast integral types to real, as the integer
 versions are optimized for that.
 
I had the following in my tree for a while, just committed it now so you can
look at it:
F pow(F)(F x, uint n) if (isFloatingPoint!(F))
F pow(F)(F x, int n) if (isFloatingPoint!(F))
F pow(F)(F x, F y) if (isFloatingPoint!(F))
Would this be enough?
-- 
 Jan 30 2009
http://d.puremagic.com/issues/show_bug.cgi?id=2636I had the following in my tree for a while, just committed it now so you can look at it: F pow(F)(F x, uint n) if (isFloatingPoint!(F)) F pow(F)(F x, int n) if (isFloatingPoint!(F)) F pow(F)(F x, F y) if (isFloatingPoint!(F)) Would this be enough?Is returning F a legitimate concern? Generally when one is working with one type, one tends to stick with that type, but you would lose precision, as the actual implementation does return a real. I'd say it's ok to return F instead of real, but others might disagree. But in general, your implementation is probably viable for D2, but not for D1. D1 Tango can at least be fixed, if Walter nixes fixing D1 phobos (even though this is a fix that does not change the API). --
 Jan 30 2009
http://d.puremagic.com/issues/show_bug.cgi?id=2636 Steven - (1) Actually, since any x86 implementation using 80-bit reals returns the result on the FP stack, double pow(double x) actually returns an 80-bit result! So I think it's OK to return F. (2) I've managed to sneak a couple of minor improvements into std.math since D1 was frozen, which closed the gap between Tango and Phobos. I think this problem also can be fixed without any change to user code. I'll do it in Tango first, though. (3) pow(x, int) is a function which could sensibly be a compiler intrinsic. (In fact there are interesting cases like pow(x, 15) which can be done most rapidly as y = x*x*x; z = y*y return y * z*z; but which are only worth doing if you know the exponent at compile time). --
 Jan 31 2009
http://d.puremagic.com/issues/show_bug.cgi?id=2636
Brad Roberts <braddr puremagic.com> changed:
           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |braddr puremagic.com
---
What's the state of this bug with all the pow related changes over the last
month or so?
-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
 Feb 18 2010
http://d.puremagic.com/issues/show_bug.cgi?id=2636What's the state of this bug with all the pow related changes over the last month or so?No change. It's been implemented for D2 for a year. It was never implemented for D1. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
 Feb 21 2010
http://d.puremagic.com/issues/show_bug.cgi?id=2636 --- Any intent to fix in d1 or should it be closed as wontfix? -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
 Feb 21 2010
http://d.puremagic.com/issues/show_bug.cgi?id=2636 04:57:02 PST --- As there seems to be very little care for D1 phobos, I'm not sure it matters. Most phobos users probably use D2, and D1 users are probably mostly using Tango (which should have the fix). I have no problem closing this, I wasn't really caring if Phobos 1 was fixed, but this bug was filed as the result of helping someone who was using phobos (don't remember the details) or discussing it on the newsgroup. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
 Feb 22 2010
http://d.puremagic.com/issues/show_bug.cgi?id=2636
Don <clugdbug yahoo.com.au> changed:
           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |WONTFIX
I do not think it is possible to change this in D1 without breaking existing
code.
-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
 Jun 13 2010








 
  
  
 
 d-bugmail puremagic.com
 d-bugmail puremagic.com 