mpm.quad(lambda t: mpm.sin(t) * 1.e40, [1, 3], verbose=True)
Integrating from 1 to 3 (degree 1 of 8)
Integrating from 1 to 3 (degree 2 of 8)
Estimated error: 6.16112e+36 epsilon: 2.18953e-47 result: 1.53029e+40
Integrating from 1 to 3 (degree 3 of 8)
Estimated error: 1.0 epsilon: 2.18953e-47 result: 1.53029e+40
Integrating from 1 to 3 (degree 4 of 8)
Estimated error: 1.0 epsilon: 2.18953e-47 result: 1.53029e+40
Integrating from 1 to 3 (degree 5 of 8)
Estimated error: 1.0 epsilon: 2.18953e-47 result: 1.53029e+40
Integrating from 1 to 3 (degree 6 of 8)
Estimated error: 1.0e-10 epsilon: 2.18953e-47 result: 1.53029e+40
Integrating from 1 to 3 (degree 7 of 8)
Estimated error: 1.0e-9 epsilon: 2.18953e-47 result: 1.53029e+40
Integrating from 1 to 3 (degree 8 of 8)
Estimated error: 1.0e-10 epsilon: 2.18953e-47 result: 1.53029e+40
Failed to reach full accuracy. Estimated error: 1.0e-10
Needless to say, without the 1.e40 scaling quad() does hit full accuracy.
Is quad() iterating until it hits an absolute error target rather than
a relative error target?