forum.alglib.net

ALGLIB forum
It is currently Thu Dec 01, 2022 8:57 pm

All times are UTC


Forum rules


1. This forum can be used for discussion of both ALGLIB-related and general numerical analysis questions
2. This forum is English-only - postings in other languages will be removed.



Post new topic Reply to topic  [ 10 posts ] 
Author Message
 Post subject: Error: APSERVAreDistinct: internal error (not sorted)
PostPosted: Sun Dec 05, 2021 3:15 pm 
Offline

Joined: Sun Dec 05, 2021 2:12 pm
Posts: 2
Hi everybody,

I am encountering the error "APSERVAreDistinct: internal error (not sorted)" using the function spline1dbuildakima() for 1D interpolation of data. Basically, I am interpolating multiple signals one after another, with all of them using the same spline nodes (in my case "timestamps"). They get called right after another:

Code:
   

alglib::real_1d_array pos_east, pos_north, pos_yaw, vel_mag, vel_angle, vel_yaw, timestamps;
alglib::spline1dinterpolant pos_east_int, pos_north_int, pos_yaw_int, vel_mag_int, vel_angle_int, vel_yaw_int;

void trajInterpolation(trajENU& traj) {

    for (int i = 0; i < 50; i++) {
       timestamps[i] = traj.timestamps[i];
       pos_east[i] = traj.pos_enu_east_m[i];
       pos_north[i] = traj.pos_enu_north_m[i];
       pos_yaw[i] = traj.ori_enu_psi_rad[i];
       vel_mag[i] = traj.vel_enu_mag_m_s[i];
       vel_angle[i] = traj.vel_enu_angle_rad[i];
       vel_yaw[i] = traj.ori_vel_enu_psi_rad_s[i];
    }

    alglib::spline1dbuildakima(timestamps, pos_east, pos_east_int);
    alglib::spline1dbuildakima(timestamps, pos_north, pos_north_int);
    alglib::spline1dbuildakima(timestamps, pos_yaw, pos_yaw_int);
    alglib::spline1dbuildakima(timestamps, vel_mag, vel_mag_int);
    alglib::spline1dbuildakima(timestamps, vel_angle, vel_angle_int);
    alglib::spline1dbuildakima(timestamps, vel_yaw, vel_yaw_int);

}

main () {
   
    [...]

    timestamps.setlength(50);
    pos_east.setlength(50);
    pos_north.setlength(50);
    pos_yaw.setlength(50);
    vel_mag.setlength(50);
    vel_angle.setlength(50);
    vel_yaw.setlength(50);

    [...]

    // A task is started, that calls trajInterpolation(trajENU& traj) cyclically
   
}



From what I understand, the error occurs, when the x-values for the spline (in my case "timestamps") are not sorted when passed to spline1dbuildakima. However, when the error occurs, the timestamps are sorted and distinct (example data that actually cause the error in my setup below):

1235908840.4490000000
1235908840.5490000000
1235908840.6490000000
1235908840.7490000000
1235908840.8490000000
1235908840.9490000000
1235908841.0490000000
1235908841.1490000000
1235908841.2490000000
1235908841.3490000000
1235908841.4490000000
1235908841.5490000000
1235908841.6490000000
1235908841.7490000000
1235908841.8490000000
1235908841.9490000000
1235908842.0490000000
1235908842.1490000000
1235908842.2490000000
1235908842.3490000000
1235908842.4490000000
1235908842.5490000000
1235908842.6490000000
1235908842.7490000000
1235908842.8490000000
1235908842.9490000000
1235908843.0490000000
1235908843.1490000000
1235908843.2490000000
1235908843.3490000000
1235908843.4490000000
1235908843.5490000000
1235908843.6490000000
1235908843.7490000000
1235908843.8490000000
1235908843.9490000000
1235908844.0490000000
1235908844.1490000000
1235908844.2490000000
1235908844.3490000000
1235908844.4490000000
1235908844.5490000000
1235908844.6490000000
1235908844.7490000000
1235908844.8490000000
1235908844.9490000000
1235908845.0490000000
1235908845.1490000000
1235908845.2490000000
1235908845.3490000000

Furthermore, the error is not reproducible in a deterministic way. I am working on embedded hardware and the function trajInterpolation(trajENU& traj) is called cyclically with a relatively high frequency (50 Hz). When supplying precisely identical input data (trajENU& traj) two things can be observed:

    The error is thrown after a varying number of iterations. trajENU& traj is changed by my program on a periodic basis, but for this test I always provide the same sequence of data. The error sometimes occurs very early in the sequence, the next time that part obviously works fine and the error occurs later on in the sequence. Sometimes the error doesn't occur at all (using the exact same data sequence every time!).

    When the error is thrown, it doesn't happen during the same call of alglib::spline1dbuildakima() inside trajInterpolation(trajENU& traj). As shown above, I am calling alglib::spline1dbuildakima() multiple times in each iteration with different y-values. Usually, the first couple of calls work before it crashes. However, "timestamps" does not change between these calls so I don't understand why the error isn't thrown during the first call (assuming "timestamps" contains non-sorted data).

I even verified the content of x->ptr.p_double inside ae_bool aredistinct() function in alglibinternal.cpp when the error is thrown and it's identical to the timestamps shown earlier.


I am quite lost on what's causing this behavior and any help is mightily appreciated. If I missed to provide any important information for understanding, please let me know.



Edit:
I narrowed the issue down further by extending the ae_bool aredistinct function in the following way:

Code:
/*************************************************************************
This function checks that all values from X[] are distinct. It does more
than just usual floating point comparison:
* first, it calculates max(X) and min(X)
* second, it maps X[] from [min,max] to [1,2]
* only at this stage actual comparison is done

The meaning of such check is to ensure that all values are "distinct enough"
and will not cause interpolation subroutine to fail.

NOTE:
    X[] must be sorted by ascending (subroutine ASSERT's it)

  -- ALGLIB --
     Copyright 02.12.2009 by Bochkanov Sergey
*************************************************************************/
ae_bool aredistinct(/* Real    */ ae_vector* x,
     ae_int_t n,
     ae_state *_state)
{
    double a;
    double b;
    ae_int_t i;
    ae_bool nonsorted;
    ae_bool result;


    ae_assert(n>=1, "APSERVAreDistinct: internal error (N<1)", _state);
    if( n==1 )
    {
       
        /*
         * everything is alright, it is up to caller to decide whether it
         * can interpolate something with just one point
         */
        result = ae_true;
        return result;
    }
    a = x->ptr.p_double[0];
    b = x->ptr.p_double[0];
    nonsorted = ae_false;
    for(i=1; i<=n-1; i++)
    {
        a = ae_minreal(a, x->ptr.p_double[i], _state);
        b = ae_maxreal(b, x->ptr.p_double[i], _state);
        nonsorted = nonsorted||ae_fp_greater_eq(x->ptr.p_double[i-1],x->ptr.p_double[i]);
       
        if (ae_fp_greater_eq(x->ptr.p_double[i-1],x->ptr.p_double[i]) == true) {
           std::cout << std::fixed;
           std::cout << "x->ptr.p_double[i-1]: " << x->ptr.p_double[i-1] << std::endl;
           std::cout << "x->ptr.p_double[i]: " << x->ptr.p_double[i] << std::endl;
        }
    }

    ae_assert(!nonsorted, "APSERVAreDistinct: internal error (not sorted)", _state);
    for(i=1; i<=n-1; i++)
    {
        if( ae_fp_eq((x->ptr.p_double[i]-a)/(b-a)+1,(x->ptr.p_double[i-1]-a)/(b-a)+1) )
        {
            result = ae_false;
            return result;
        }
    }
    result = ae_true;
    return result;
}


The added part

Code:
        if (ae_fp_greater_eq(x->ptr.p_double[i-1],x->ptr.p_double[i]) == true) {
           std::cout << std::fixed;
           std::cout << "x->ptr.p_double[i-1]: " << x->ptr.p_double[i-1] << std::endl;
           std::cout << "x->ptr.p_double[i]: " << x->ptr.p_double[i] << std::endl;
        }


outputs:

x->ptr.p_double[i-1]: 1235908880.616000
x->ptr.p_double[i]: 1235908880.716000


Clearly, ptr.p_double[i-1] isn't >= ptr.p_double[i] and when I write a program for my target hardware that is only performing the comparison with the numbers above, "false" is returned. So the issue only occurs when the code is running within a more complex project with a higher frequency. Any ideas, why ae_fp_greater_eq returns true in such a case?


Top
 Profile  
 
 Post subject: Re: Error: APSERVAreDistinct: internal error (not sorted)
PostPosted: Mon Dec 06, 2021 3:05 pm 
Offline
Site Admin

Joined: Fri May 07, 2010 7:06 am
Posts: 880
Hi!

ae_fp_greater_eq() is very simple function, it is just a wrapper around >= operator (with two volatile locals used to workaround bugs related to legacy 80-bit floating point FPUs). There is simply no place for an error to creep in. I don't say that ALGLIB is 100% error free, but this particular piece of code simply has no place for errors. It is complete surprise for me that you nevertheless has this error.

Would you like to tell me about specific hardware being used to execute the program? Especially, CPU type?


Top
 Profile  
 
 Post subject: Re: Error: APSERVAreDistinct: internal error (not sorted)
PostPosted: Mon Dec 06, 2021 3:21 pm 
Offline

Joined: Sun Dec 05, 2021 2:12 pm
Posts: 2
Hi Sergey,

thanks for your reply! I am working on a Xilinx Zynq Ultrascale+ ZU3EG using an ARM Cortex R5 realtime core and FreeRTOS.
In the meantime, I was able to narrow down the issue further. By calling ae_fp_greater_eq() with hardcoded values in a endless loop, I have a chance of about 2*10⁻9 that the functions returns true instead of false. Interestingly, I buffered the result of the comparison in a global variable (result_tmp) - when the return value (result) is true, result_tmp is correctly false. So it appears the issue is not located in the comparison but in the process of returning the value from the function.

I'm getting a feeling this is more of a hardware bug than anything else ... Never encountered it anywhere else though.

Code:
bool result_tmp;

ae_bool ae_fp_greater_eq(double v1, double v2){

/* IEEE-strict floating point comparison */

volatile double x = v1;
volatile double y = v2;
result_tmp = x>=y;
return x>=y;

}

main() {

while(1) {
    double x = 1235908880.616;
    double y = 1235908880.716;
    ae_bool result = ae_fp_greater_eq(x, y);
}

}


Top
 Profile  
 
 Post subject: Re: Error: APSERVAreDistinct: internal error (not sorted)
PostPosted: Mon Dec 06, 2021 10:06 pm 
Offline
Site Admin

Joined: Fri May 07, 2010 7:06 am
Posts: 880
Given what you already found, 100% hardware bug.

However, it is really interesting why it did not appear anywhere else. Is it possible to take a look at disassembly of the modified ae_fp_greater_eq?


Top
 Profile  
 
 Post subject: Платно Терапевт
PostPosted: Sun Nov 06, 2022 7:06 am 
Offline

Joined: Sun Nov 06, 2022 7:06 am
Posts: 3
Location: Chile
В 1995 году получила диплом о профессиональной переподготовке в Петрозаводском государтсвенном университете по специальности , а затем постоянно повышала свою квалификацию https://megatmt.com/kabinet-kardiologa/

В медицинских центрах ведут прием детские врачи-специалисты по всем основным медицинским направлениям https://megatmt.com/kabinet-otolaringologa/
Проводится вакцинация, оформляются справки в детские сады, школы, летние оздоровительные лагеря, бассейн https://megatmt.com/kabinet-uzi/

Иммунный статус (клеточный и гуморальный иммунитет, фагоцитоз): общее количество лимфоцитов, СD3, CD4, CD8, CD19, CD16, CD56, фагоцитарный индекс, фагоцитарный показатель, С3 компонент комплемента, С4 компонент комплемента, иммуноглобулины А, М, G, циркулирующие иммунные комплексы, С-реактивный белок
Эффекту плацебо подвержены не только люди, но и животные https://megatmt.com/onkocitology/
В контрольной группе страдающих эпилепсией собак, которым давали пустышки, количество судорог уменьшилось у 79% участников https://megatmt.com/vyzov-vracha-i-medsestry-na-dom/
Учёные предполагают, что улучшение состояния объясняется либо ожиданием самих собак, привыкших к лекарствам за много лет болезни, либо ожиданием их хозяев, передающих животным уверенность в пользе лечения https://megatmt.com/kabinet-terapevta/
Также нельзя исключать более прозаическое объяснение, связанное с циклической природой эпилепсии: так как приём плацебо может приходиться на фазу обострения, через какое-то время судорог становится меньше в силу естественных причин https://megatmt.com/medikamentoznoe-preryvanie-beremennosti/


В 1981 году окончила Петрозаводский государственный университет им https://megatmt.com/onkocitology/
О http://megatmt.com
В https://megatmt.com/laboratorija/
Куусинена по специальности https://megatmt.com/kabinet-otolaringologa/

_________________
https://megatmt.com/vyzov-vracha-i-medsestry-na-dom/


Top
 Profile  
 
 Post subject: Гинеколог В
PostPosted: Sun Nov 06, 2022 7:07 am 
Offline

Joined: Sun Nov 06, 2022 7:06 am
Posts: 3
Location: Chile
Диагностическая клиника находится в Москве, выходить нужно на станции метро Мякинино https://megatmt.com/vyzov-vracha-i-medsestry-na-dom/
Записываться на прием нужно только по телефону,  по интернету и электронной почте запись не ведется https://megatmt.com/uzi-3d-4d/

Несомненным преимуществом клиники является так называемая Школа пациентов https://megatmt.com/procedurnyj-kabinet/
Специалисты благотворительного медицинского диагностического центра Белая роза обучают своих пациенток методам самообследования https://megatmt.com/uzi-3d-4d/
Это позволяет женщине самой выявлять изменения в молочной железе и вовремя обратиться к врачу в случае подозрения на патологию https://megatmt.com/kabinet-ginekologa/

Эхо-кардиография- определение врожденного и приобретенного пороков сердца, уточняя их степень и необходимость хирургического лечения легочной гипертензии кардиомиопатии заболевания эндокарда и перикарда, а также опухоли сердца https://megatmt.com/vyzov-vracha-i-medsestry-na-dom/

В 1977 году окончил Архангельский государственный медицинский институт по специальности , после чего закончил интернатуру по терапии в 1978 году https://megatmt.com/vakuumnaja-aspiracionnaja-biopsija/

6 http://megatmt.com
Администрация сайта оставляет за собой право не принимать и не отвечать на вопросы: заданные на любом языке, кроме русского, содержащие оскорбления, угрозы, ненормативную лексику, а также обращения, предметом которых являются отзывы или жалобы https://megatmt.com/stoimost_yslyg/

_________________
https://megatmt.com/vyzov-vracha-i-medsestry-na-dom/


Top
 Profile  
 
 Post subject: Оториноларинголога
PostPosted: Sun Nov 06, 2022 7:08 am 
Offline

Joined: Sun Nov 06, 2022 7:06 am
Posts: 3
Location: Chile
Одним из бесспорных преимуществ нашего центра является то, что он оказывает платные услуги, цены на которые доступны даже малообеспеченным гражданам https://megatmt.com/partner/
Дело в том, что у нас действуют различные социальные программы и существует гибкая система скидок https://megatmt.com/vyzov-vracha-i-medsestry-na-dom/
Так, центр эстетической медицины имеет государственную лицензию https://megatmt.com/procedurnyj-kabinet/
Также следует отметить, что наш академический медицинский центр находится недалеко от центра города https://megatmt.com/kabinet-kardiologa/

От пациентки реабилитационного центра Шарафутдиновой Т https://megatmt.com/kabinet-kardiologa/
Ф https://megatmt.com/vyzov-vracha-i-medsestry-na-dom/
и моих родственников https://megatmt.com/stoimost_yslyg/
Очень довольны и благодарны за доброе и хорошее отношение начиная с зав https://megatmt.com/stoimost_yslyg/
отделением онкологии и заканчивая санитарками https://megatmt.com/norma-ili-anomalija/
Здесь чистота, опрятность и внимательное отношение к больным https://megatmt.com/kabinet_vrachi/
На самом высоком уровне работа хирурга, врачей и всего персонала https://megatmt.com/norma-ili-anomalija/
Клиника оснащена самыми современными технологиями https://megatmt.com/kabinet_vrachi/
Начиная с приемного отделения, все работники центра очень доброжелательные отзывчивые https://megatmt.com/stoimost_yslyg/
Особенно хочется поблагодарить Исаханова А https://megatmt.com/kabinet-otolaringologa/
Е https://megatmt.com/vakuumnaja-aspiracionnaja-biopsija/
, Коваленко З https://megatmt.com/vakuumnaja-aspiracionnaja-biopsija/
А https://megatmt.com/kabinet-terapevta/
и Барон Е https://megatmt.com/procedurnyj-kabinet/
А https://megatmt.com/vakuumnaja-aspiracionnaja-biopsija/
https://megatmt.com
Всем огромное спасибо!!! Желаем вам процветания и крепкого здоровья! Везде бы так принимали и обращались как ваши работники https://megatmt.com/laboratorija/
Благодарим Вас! Низкий поклон за маму!
Проскурякова Татьяна НиколаевнаХочу выразить свою сердечную благодарность и всей душой поблагодарить Стёпкину Галину Алексеевну!Это врач с большой буквы, настоящий мастер своего дела!Галина Алексеевна очень трепетно относится к своей профессии, в буквальном смысле переживает за каждого пациента https://megatmt.com/laboratorija/
Сейчас таких врачей просто не https://megatmt.com/kabinet-uzi/
https://megatmt.com/kabinet_vrachi/
https://megatmt.com/kabinet-ginekologa/

Врач-невролог принимает пациентов с возможными нарушениями центральной и периферической нервной системы https://megatmt.com/testimonials/
Неврология - раздел медицины, занимающийся вопросами возникновения заболеваний центральной и…
Специализация: Владеет всеми методами функциональной диагностики: ЭХО сердца, холтеровское мониторирование ЭКГ, суточное мониторирование АД, ЭКГ, стресс-тест https://megatmt.com/stoimost_yslyg/
Диагностика и лечение заболеваний сердечно-сосудистой системы https://megatmt.com/onkocitology/

К Вашим услугам программы диспансерного наблюдения за детьми до года https://megatmt.com/kabinet-uzi/
Неограниченное количество консультаций педиатра https://megatmt.com/procedurnyj-kabinet/
Возможность позвонить педиатру в любое время https://megatmt.com/kabinet-terapevta/
Патронаж новорожденных на дому https://megatmt.com/kabinet-ginekologa/

_________________
https://megatmt.com/vyzov-vracha-i-medsestry-na-dom/


Top
 Profile  
 
 Post subject: Ведения Бухучета
PostPosted: Sun Nov 06, 2022 7:09 am 
Offline

Joined: Sun Nov 06, 2022 7:08 am
Posts: 3
Location: Belgium
Дебет 44 Кредит 76 субсчет Расчеты с посредником по возмещению расходов– отражена сумма расходов, подлежащих возмещению посреднику (на основании договора и отчета посредника) https://m-count.ru/buhgalterskoe-obsluzhivanie

- представление интересов одной стороны против другой стороны в судах или других судебных органах: консультирование и представительство в гражданских делах, консультирование и представительство в уголовных делах, консультирование и представительство в связи с трудовыми спорами
В первом случае при реализации товаров и некоторых видов работ, услуг (например, услуг связи) покупателю документы составляются от имени посредника https://m-count.ru/uslugi
Во втором случае – от имени заказчика, даже если их оформляет посредник https://m-count.ru/buhgalterskiy-autsorsing

_________________
https://m-count.ru/


Top
 Profile  
 
 Post subject: Помощь Бухгалтерская
PostPosted: Sun Nov 06, 2022 7:09 am 
Offline

Joined: Sun Nov 06, 2022 7:08 am
Posts: 3
Location: Belgium
ООО Модерн оказывает услуги наружной рекламы http://m-count.ru/ekspress-analiz-sostoyaniya-buhgalterskogo-ucheta
ООО Ассорти заказало баннер на магазин https://m-count.ru/vosstanovlenie-ucheta
Сумма по договору составила 38 335 руб https://m-count.ru/
(в т https://m-count.ru/buhgalterskoe-obsluzhivanie
ч https://m-count.ru/buhgalterskoe-obsluzhivanie
НДС 5 847,71 руб http://m-count.ru/ekspress-analiz-sostoyaniya-buhgalterskogo-ucheta
) https://m-count.ru/uslugi




Положения этой главы применяются к договорам оказания услуг связи, медицинских, ветеринарных, аудиторских, консультационных, информационных услуг, по обучению, туристическому обслуживанию и иных (за исключением предусмотренных главами 37 — 53 ГК РФ) https://m-count.ru/

_________________
https://m-count.ru/


Top
 Profile  
 
 Post subject: Стоимость Бухгалтерского Обслуживания
PostPosted: Sun Nov 06, 2022 7:10 am 
Offline

Joined: Sun Nov 06, 2022 7:08 am
Posts: 3
Location: Belgium
Позвоните или напишите нам https://m-count.ru/uslugi-buhgaltera
Мы совершенно бесплатно проконсультируем вас https://m-count.ru/uslugi-buhgaltera
Обсудим ваши потребности и мы обязательно сможем помочь вам! Мы всегда открыты для вас и готовы ответить на ваши звонки и письма!


Бухгалтерские услуги, в частности, ведение бухучета - это то, что нужно как малым, так и средним компаниям для повышения прибыли за счёт освобождения времени для действительно сильных бизнес-решений http://m-count.ru/ekspress-analiz-sostoyaniya-buhgalterskogo-ucheta
Мы избавляем от рутины и даём полное спокойствие за бухучет https://m-count.ru/

То же относится и к работам https://m-count.ru/buhgalterskiy-autsorsing
В зависимости от вида услуг (работ) нужно оформить и соответствующий комплект документов https://m-count.ru/buhgalterskie-uslugi-dlya-nachinayushchih-kompanij
В любом случае о проделанной посредником работе и его расходах будет свидетельствовать отчет посредника https://m-count.ru/buhgalterskiy-autsorsing

_________________
https://m-count.ru/


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 10 posts ] 

All times are UTC


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group