Bioequivalence and Bioavailability Forum 00:35 CEST

Main page Policy/Terms of Use Abbreviations Latest Posts

 Log in |  Register |  Search

Nervous ticks in C - a reminder of the cruel logic of logic [Software]

posted by ElMaestro - Denmark, 2018-03-15 10:24  - Posting: # 18549
Views: 1,645

Hi all,

sometimes logic totally sucks.

I am making code in C for plotting various graphs, and am making a little routine for inserting ticks on an axis. Ticks have to be "nice" (yes, that's also the word used in the R documentation).

So, let us say the maximum observed value is x=0.234567 and I want ticks evenly dispersed at a distance of dx=0.05 (say from 0.0 and upwards). So, I thought I was clever and calculated the "maximum" tick as
xmax = dx*ceil(x/dx)

You can see one definition of the ceil function here.

So, one way to test it is like this, which will print the actual ticks:

int Test10001(double x, double dx)
{
    double xmax;
    xmax=dx*ceil(x/dx);
    x=0.0;
    while (x<=xmax)
    {
        printf("x=%f\n",x);
        x=x+dx;
    }
    return(0);
}


When I call that function with arguments 0.234567 and 0.05 it prints:
x=0.000000
x=0.050000
x=0.100000
x=0.150000
x=0.200000


but it doesn't print 0.25 ?!???:-D:-D:-D:-D

If I add a line like
printf("xmax=%f\n", xmax);

then I get
xmax=0.250000

This is the beauty of C. Sometimes it is all-out warfare with this language and little tasks that should take 2 minutes take 2 days and end up with theory around little endians and data types and ANSI specifications and God knows what else :crying::crying:.


Edit: Category changed; see also this post #1. [Helmut]

if (3) 4

Best regards,
ElMaestro

"(...) targeted cancer therapies will benefit fewer than 2 percent of the cancer patients they’re aimed at. That reality is often lost on consumers, who are being fed a steady diet of winning anecdotes about miracle cures." New York Times (ed.), June 9, 2018.

Complete thread:

Back to the forum Activity
 Mix view
Bioequivalence and Bioavailability Forum |  Admin contact
18,697 posts in 3,982 threads, 1,237 registered users;
online 14 (0 registered, 14 guests [including 14 identified bots]).

Science should always be the basis
of regulatory requirements.    Joachim Röhmel

The BIOEQUIVALENCE / BIOAVAILABILITY FORUM is hosted by
BEBAC Ing. Helmut Schütz
HTML5 RSS Feed