Giter Club home page Giter Club logo

Comments (6)

lambdaupb avatar lambdaupb commented on August 15, 2024

I doubt this was a problem with Duration. After looking at the code it uses f64 in the buf vector instead of Durations. Duration supports addition and there is no need to convert to f64 before summing it up.

Floats are imprecise by construction. The time API works on nanoseconds internally and so should we. conversion to f64 should be the last step.

from indicatif.

krdln avatar krdln commented on August 15, 2024

Perhaps I've made a mistake by suggesting a solution in the issue's title instead of just describing it.

After looking at the code it uses f64 in the buf vector instead of Durations. Duration supports addition and there is no need to convert to f64 before summing it up.

I think storing actual durations as Duration would be perfectly fine. It's different here though — what we store here is not a duration, but rather speed^−1 — duration divided by number of steps. So the loss of precision happens anyway, in the moment of division itself and by rounding the time_per_step to nanoseconds. And exactly this rounding to nanoseconds makes the indicatif unusable with transfer rates of the order of GB/s.

By the way, f64 is able to store a number of nanoseconds losslessly up to about 7 months (and µs to about 500 years), so I wouldn't worry too much about the loss of precision.

from indicatif.

lambdaupb avatar lambdaupb commented on August 15, 2024

I mean why store the result of a lossy calculation instead of both values for each step. Then sum the components separately and divide afterwards.

Although I'm wondering why its not just using 0.9*last + 0.1*current for estimating instead of this buffer construction.

from indicatif.

kayru avatar kayru commented on August 15, 2024

Encountered this issue also. The nanosecond precision used by Duration is really not enough when dealing with time per step calculations. Rates of >1e9/s can be relatively easy to achieve when dealing with things like reading bytes from modern SSDs. Using f64 specifically to compute Estimate::time_per_step() is quite reasonable, as it is not dealing with precise durations.

from indicatif.

djc avatar djc commented on August 15, 2024

I'm happy to review a PR for this.

from indicatif.

kayru avatar kayru commented on August 15, 2024

Incoming!

from indicatif.

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.