c++ - In which segment a given number lies in? -


this question has answer here:

suppose have n (integer) contiguous segments of length l (floating point). is:

segment 0 = [0, l) segment 1 = [l, 2*l) segment 2 = [2*l, 3*l) ...  segment (n-1) = [(n-1)*l, n*l)  

given number x (floating point) want determine id of segment lies inside.

my first idea following:

int segmentid = (int) floor(x/l); 

anyway, not work. example, consider

double l = 1.1; double x = 5.5; int segmentid = (int) floor(x/l); //returns 5   double l = 1.1; double x = 6.6; int segmentid = (int) floor(x/l); //returns 5!!! 

of course, due finite arithmetic, not work well. maybe checks required in order have robust implementation, don't know how proceed further.

the question is: how solve problem "in segment given number lies in?"

your problem neither 1.1, nor 6.6 representable in binary floating point. when type

double l = 1.1; double x = 6.6; 

you 2 numbers stored in l , in x, different 1.1 , 6.6. after that, int segmentid = (int) floor(x/l); determines correct segment different numbers, not original numbers.

you can solve problem using decimal floating point data type instead of binary. can check c++ decimal data types , exact decimal datatype c++? libraries, or implement decimal data type yourself.

but still problem remain numbers, not representable in finite decimal floating point, such 1/3 (circulating fraction), sqrt(2) (irrational), pi (transcendental), etc.


Comments

Popular posts from this blog

Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12:test (default-test) on project.Error occurred in starting fork -

windows - Debug iNetMgr.exe unhandle exception System.Management.Automation.CmdletInvocationException -

configurationsection - activeMq-5.13.3 setup configurations for wildfly 10.0.0 -