Giter Site home page Giter Site logo

Dealing with NANs about math-php HOT 3 CLOSED

Beakerboy avatar Beakerboy commented on May 25, 2024
Dealing with NANs

from math-php.

Comments (3)

markrogoyski avatar markrogoyski commented on May 25, 2024

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.

Beakerboy avatar Beakerboy commented on May 25, 2024

MathPHP\Exception\NanException Sounds like a great compromise.

from math-php.

markrogoyski avatar markrogoyski commented on May 25, 2024

Version 2.5.0 implemented NanException as discussed.

from math-php.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.