Hi, I have tried my function to test on 64 bits CPU and OS with my 1024 bits numbers. I wanted to get (a_ * b) mod p_.
I call my function as "ModularReductionABP(a_, b_, SIZE_16, p_);". I prefered to use "mpn_tdiv_qr" function to get mod as Bill suggested. Do I use mpn_tdiv_qr function correctly in order to calculate equation? You also can see the results I got. I checked in python and it seems wrong :) Any review will be appreciated. Thanks. mp_limb_t a_[16] = { 0x172AABC8172AABC7, 0x172AABCA172AABC9, 0x172AABCC172AABCB, 0x172AABCE172AABCD, \ 0x172AABD0172AABCF, 0x172AABD2172AABD1, 0x172AABD4172AABD3, 0x172AABD6172AABD5, \ 0x172AABD8172AABD7, 0x172AABDA172AABD9, 0x172AABDC172AABDB, 0x172AABDE172AABDD, \ 0x172AABE0172AABDF, 0x172AABE2172AABE1, 0x172AABE4172AABE3, 0x172AABE6172AABE5 }; mp_limb_t b_[16] = { 0x263BBAC5263BBAC4, 0x263BBAC7263BBAC6, 0x263BBAC9263BBAC8, 0x263BBACB263BBACA, \ 0x263BBACD263BBACC, 0x263BBACF263BBACE, 0x263BBAD1263BBAD0, 0x263BBAD3263BBAD2, \ 0x263BBAD5263BBAD4, 0x263BBAD7263BBAD6, 0x263BBAD9263BBAD8, 0x263BBADB263BBADA, \ 0x263BBADD263BBADC, 0x263BBADF263BBADE, 0x263BBAE1263BBAE0, 0x263BBAE3263BBAE2 }; mp_limb_t p_[16] = { 0xFFFCCDC8FFFCCDC7, 0xFFFCCDCAFFFCCDC9, 0xFFFCCDCCFFFCCDCB, 0xFFFCCDCEFFFCCDCD, \ 0xFFFCCDD0FFFCCDCF, 0xFFFCCDD2FFFCCDD1, 0xFFFCCDD4FFFCCDD3, 0xFFFCCDD6FFFCCDD5, \ 0xFFFCCDD8FFFCCDD7, 0xFFFCCDDAFFFCCDD9, 0xFFFCCDDCFFFCCDDB, 0xFFFCCDDEFFFCCDDD, \ 0xFFFCCDE0FFFCCDDF, 0xFFFCCDE2FFFCCDE1, 0xFFFCCDE4FFFCCDE3, 0xFFFCCDE6FFFCCDE5 }; /* (a * b) mod p */ void ModularReductionABP(mp_limb_t *a, mp_limb_t *b, mp_size_t size, mp_limb_t *mod) { mp_limb_t multiplicationResult[size*2]; memset(multiplicationResult, 0, size*2 * sizeof(mp_limb_t)); gmp_printf("multiply..\n"); mpn_mul(multiplicationResult, a, size, b, size); gmp_printf("result1: %Nu\n", multiplicationResult, size); mp_limb_t c[size]; mp_limb_t d[size]; memset(c, 0, size * sizeof(mp_limb_t)); memset(d, 0, size * sizeof(mp_limb_t)); mpn_tdiv_qr(c,d,0, multiplicationResult, 2*size, mod, size); gmp_printf("\nresult2: %Nu\n\n\n", c, size); gmp_printf("\nresult3: %Nu\n\n\n", d, size); } kays@vaio64 ~/bitbucket/directclass1 $ ./directclass multiply.. result1: 31281781659108383759180173958845112706426388361681641530245996098380308639750083352747732789827718498185054130827808940526536050680884926042209184887699334785206221487960805670752790468657177265817154198670207174990288213545137774992462228884802070093390645505861602741915290739896925800431411039961739631196 result2: 2429756350689766842694556740638161392277857848926668771080399749522920535325879270426445494248468898753801674387648617800632488461559493081196952232954152384865660243312530684478669749481313879910421763146520460034374221906008666223048145368346070028782670880568536251388917403070056424840082484158524859379 result3: 119827277741323452445682903729823582048706420516522175626015394884400805867627030482198093601765997029383775676902120915520776000173466686652429756142248391127436426886472063872387092222440604402544020609660542632564066945743318810459630408032366484113006969187829316848492073764841523026162907833940468437367 On Mon, Feb 4, 2013 at 10:39 AM, mgundes <mg...@hotmail.com> wrote: > > Hi Case and Bill, > > Thanks for your answers, appreciated. I will try your suggestions in > the evening when I arrive home. > > Regards, > Thanks > > > On Sun, Feb 3, 2013 at 11:54 PM, Bill Hart <goodwillh...@googlemail.com>wrote: > >> Hi Mahmut, >> >> there is the division with remainder function (mpn_tdiv_qr). The >> remainder is the same thing as mod of course. >> >> In practice it takes about the same time to compute quotient and >> remainder as it does to compute just remainder. >> >> Bill. >> >> On 3 February 2013 20:48, mgundes <mg...@hotmail.com> wrote: >> > >> > Hi everybody, >> > >> > I need a function to do modular operation on big numbers. I found >> > mpn_mod_1() but its modulus parameter are single mp_limb_t. I want to >> use >> > also big modulus parameter, Is there any function mpn_mod() something >> like >> > below to be able to give size of modulus? >> > >> > mp_limb_t mpn_mod (mp_limb_t *s1p, mp_size_t s1n, >> mp_limb_t >> > *s2p, mp_size_t s2n) >> > >> > Thanks for your suggestions. >> > >> > Regards, >> > Thanks >> > >> > -- >> > MahmutG >> > >> > -- >> > You received this message because you are subscribed to the Google >> Groups >> > "mpir-devel" group. >> > To unsubscribe from this group and stop receiving emails from it, send >> an >> > email to mpir-devel+unsubscr...@googlegroups.com. >> > To post to this group, send email to mpir-devel@googlegroups.com. >> > Visit this group at http://groups.google.com/group/mpir-devel?hl=en. >> > For more options, visit https://groups.google.com/groups/opt_out. >> > >> > >> >> -- >> You received this message because you are subscribed to the Google Groups >> "mpir-devel" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to mpir-devel+unsubscr...@googlegroups.com. >> To post to this group, send email to mpir-devel@googlegroups.com. >> Visit this group at http://groups.google.com/group/mpir-devel?hl=en. >> For more options, visit https://groups.google.com/groups/opt_out. >> >> >> > > > -- > MahmutG > -- MahmutG -- You received this message because you are subscribed to the Google Groups "mpir-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to mpir-devel+unsubscr...@googlegroups.com. To post to this group, send email to mpir-devel@googlegroups.com. Visit this group at http://groups.google.com/group/mpir-devel?hl=en. For more options, visit https://groups.google.com/groups/opt_out.