News for hackers. Stuff that matters.
Re:Differentiation for Hackers by adamnemecek on Saturday June 22, 2019 @03:51PM (#20251389)
Eps^3 is undefined. I don't see a problem with simplifying the exponents first.

> a complicated representation of) y=x.

The problem started as that. So no surprise.

Re:Differentiation for Hackers by tntn on Saturday June 22, 2019 @04:02PM (#20251449)
> I don't see a problem with simplifying the exponents first.

Sure, we call that computer algebra. As soon as you start doing that, you aren't doing automatic differentiation, you are doing (at least in part) symbolic differentiation.

Re:Differentiation for Hackers by adamnemecek on Saturday June 22, 2019 @04:20PM (#20251530)
You could similarly say that a computer can't calculate x^1000/x^998 because you can't fit it in 32/64 bits.
Re:Differentiation for Hackers by petschge on Saturday June 22, 2019 @04:30PM (#20251570)
And computers have a hard time with that. Take the following example code:

  #include <math.h>
  #include <stdio.h>
  #include <stdlib.h>
  double f(const double x) {
      return pow(x, 1000) / pow(x, 998);
  }
  int main(int argc, char* argv[]) {
      if(argc != 2) {
          fprintf(stderr, "Usage: %s x\n", argv[0]);
          exit(1);
      }
      const double x = atof(argv[1]); // demo code without error checking
      printf("x = %g, f(x) = %g\n", x, f(x));
      exit(0);
  }
compile with

  gcc -Wall -g -o test test.c -lm
and run it

  petschge@localhost:~$ ./test 0
    x = 0, f(x) = -nan
  petschge@localhost:~$ ./test 1
    x = 1, f(x) = 1
  petschge@localhost:~$ ./test 2
    x = 2, f(x) = 4
The fun thing is, when you compile with

  gcc -Wall -O3 -ffast-math -g -o test2 test.c -lm
you actually get

  petschge@localhost:~$ ./test2 0
    x = 0, f(x) = 0
Re:Differentiation for Hackers by adamnemecek on Saturday June 22, 2019 @04:31PM (#20251576)
That's exactly what i'm saying.