Changeset f846ac in git


Ignore:
Timestamp:
Jul 5, 2019, 3:31:35 PM (5 years ago)
Author:
tthsqe12 <tthsqe12@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
e2e2f765be02bebe5d52e7767512e55fa395ece8
Parents:
a40b288857c4e60c94e2f3ab2715381bf097761c
Message:
more robust divisons
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libpolys/polys/flint_mpoly.cc

    ra40b28 rf846ac  
    330330
    331331    convert_sing_to_fmpq_mpoly_arg * args = new convert_sing_to_fmpq_mpoly_arg[base.num_threads];
     332    slong cur_idx = 0;
    332333    for (slong i = 0; i < base.num_threads; i++)
    333334    {
     335        slong next_idx = i + 1 < base.num_threads ? (i + 1)*base.length/base.num_threads : base.length;
     336        next_idx = FLINT_MAX(next_idx, cur_idx);
     337        next_idx = FLINT_MIN(next_idx, base.length);
    334338        args[i].base = &base;
    335         args[i].start_idx = (i+0)*base.length/base.num_threads;
    336         args[i].end_idx   = (i+1)*base.length/base.num_threads;
     339        args[i].start_idx = cur_idx;
     340        args[i].end_idx   = next_idx;
     341        cur_idx = next_idx;
    337342    }
    338343
     
    464469
    465470    convert_fmpq_mpoly_to_sing_arg * args = new convert_fmpq_mpoly_to_sing_arg[base.num_threads];
     471    slong cur_idx = 0;
    466472    for (slong i = 0; i < base.num_threads; i++)
    467473    {
     474        slong next_idx = i + 1 < base.num_threads ? (i + 1)*base.f->zpoly->length/base.num_threads
     475                                                  : base.f->zpoly->length;
     476        next_idx = FLINT_MAX(next_idx, cur_idx);
     477        next_idx = FLINT_MIN(next_idx, base.f->zpoly->length);
    468478        args[i].base = &base;
    469         args[i].start_idx = (i+0)*base.f->zpoly->length/base.num_threads;
    470         args[i].end_idx   = (i+1)*base.f->zpoly->length/base.num_threads;
     479        args[i].start_idx = cur_idx;
     480        args[i].end_idx   = next_idx;
     481        cur_idx = next_idx;
    471482        args[i].poly_end = NULL;
    472483        args[i].poly_start = NULL;
     
    609620
    610621    convert_sing_to_nmod_mpoly_arg * args = new convert_sing_to_nmod_mpoly_arg[base.num_threads];
     622    slong cur_idx = 0;
    611623    for (slong i = 0; i < base.num_threads; i++)
    612624    {
     625        slong next_idx = i + 1 < base.num_threads ? (i + 1)*base.length/base.num_threads
     626                                                  : base.length;
     627        next_idx = FLINT_MAX(next_idx, cur_idx);
     628        next_idx = FLINT_MIN(next_idx, base.length);
    613629        args[i].base = &base;
    614         args[i].start_idx = (i+0)*base.length/base.num_threads;
    615         args[i].end_idx   = (i+1)*base.length/base.num_threads;
     630        args[i].start_idx = cur_idx;
     631        args[i].end_idx   = next_idx;
     632        cur_idx = next_idx;
    616633    }
    617634
     
    717734
    718735    convert_nmod_mpoly_to_sing_arg * args = new convert_nmod_mpoly_to_sing_arg[base.num_threads];
     736    slong cur_idx = 0;
    719737    for (slong i = 0; i < base.num_threads; i++)
    720738    {
     739        slong next_idx = i + 1 < base.num_threads ? (i + 1)*base.f->length/base.num_threads
     740                                                  : base.f->length;
     741        next_idx = FLINT_MAX(next_idx, cur_idx);
     742        next_idx = FLINT_MIN(next_idx, base.f->length);
    721743        args[i].base = &base;
    722         args[i].start_idx = (i+0)*base.f->length/base.num_threads;
    723         args[i].end_idx   = (i+1)*base.f->length/base.num_threads;
     744        args[i].start_idx = cur_idx;
     745        args[i].end_idx   = next_idx;
     746        cur_idx = next_idx;
    724747        args[i].poly_end = NULL;
    725748        args[i].poly_start = NULL;
Note: See TracChangeset for help on using the changeset viewer.