Comments (3)
There are pros and cons to both approaches.
Returning a NAN is nice in terms of types that NAN is kind of a float and you can have a return type declaration of float
which works for real numbers and NANs. However, there is immense complexity in every function needing to check every other function, and you will have a lot of conditional logic anytime you call a function because you can't trust that you got an actual answer back. You also push this complexity onto any clients using our code, in that they also can't trust return values if NAN comes back.
Throwing exceptions is nice because you can go back to trusting return values. Parts of the code that explicitly expects and knows how to deal with NANs can try/catch and deal with it, and other parts of the code can ignore it and pretend that only the happy path exists, because it basically only does for them. The downside is client code will crash if the exception is not handled, but as long as it is documented, it basically becomes the client's responsibility to handle it.
I have not researched what other math libraries do and could spend some time looking at some OO math libraries like Apache Commons Math and the like. But my initial thoughts without thinking too much is that for now maybe a MathPHP\Exception\NanException
is all that we need and make sure the few places it is expected is checked and we throw this new exception rather than letting a NAN return value infect other parts of the code that are not expecting or prepared to handle it.
from math-php.
MathPHP\Exception\NanException Sounds like a great compromise.
from math-php.
Version 2.5.0 implemented NanException
as discussed.
from math-php.
Related Issues (20)
- Integer Modulo n HOT 3
- Add vector, matrix and quaternion operations for 3d geometry HOT 1
- Could math-php support KPHP? HOT 1
- Truncated Mean Percentage HOT 5
- Incompatibility with Iterator and ArrayAccess interfaces HOT 1
- Quartiles calculation in Stats Descriptive HOT 1
- MiddlePayment For Loan HOT 2
- `number` is not a valid PHP type HOT 5
- Kernel Density Estimation: Improved Sheather-Jones algorithm HOT 4
- Bug for the t-test? HOT 5
- Add row/column algebra methods to Matrix for Vector HOT 3
- Document additional Matrix Row Operations and add their Columnar counterparts HOT 5
- Implicit Behavior of ImmutableSet
- Add Moore-Penrose Inverse HOT 12
- Psalm does not understand `number` pseudo-type HOT 3
- Add a factor method for Polynomials HOT 4
- Repeated measures ANOVA HOT 1
- Question regarding Linear regression on cicular data HOT 1
- How to detect a number is prime or not using this package?
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from math-php.