Sponsored Content
Top Forums Shell Programming and Scripting Newbie question: modulo operator with negative operand, bug or feature? Post 302951941 by FleetFoot on Wednesday 12th of August 2015 04:36:13 AM
Old 08-12-2015
Thanks drl,

The Perl document says:

Quote:
If $n is positive, then $m % $n is $m minus the largest multiple of $n less than or equal to $m.
which covers this case and the result should be positive or "matching the divisor". As you point out, the Wikipedia table shows BASH gives the same sign as the dividend and ASH seems to be the same.

My application was for a circular counter: given a value m, in the range 0..(size-1), the next entry is next=$(( ($m+1) % $size)) while the previous should be prev=$(( ($m-1) % $size) but that gives -1 for $m=0. The workaround is to use prev=$(( ($m+$size-1) % $size) which should work on any shell.

Thanks for all the detailed replies, I've picked up quite a bit on the syntax from this thread as well as resolving the question.
This User Gave Thanks to FleetFoot For This Post:
 

8 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Operator question

I need to find out if a variable contains a certain text string, then do something about it. Here is what I mean, but I don't know how to get a "contains" operator # We have volumes called: # /Volumes/BackupsA_K # /Volumes/BackupsL_Z # /Volumes/Backups_Admin # (could be more, etc)... (5 Replies)
Discussion started by: TheCrunge
5 Replies

2. Shell Programming and Scripting

syntax error: `-a' unexpected operator/operand in IF

When i tyr this, it gives me a syntax error...i tried removing quotes,removing spaces,replacing -eq with '='.. Can somebody suggest that is the problem? if ]; then (4 Replies)
Discussion started by: dba.admin2008
4 Replies

3. UNIX for Dummies Questions & Answers

UNIX newbie NEWBIE question!

Hello everyone, Just started UNIX today! In our school we use solaris. I just want to know how do I setup Solaris 10 not the GUI one, the one where you have to type the commands like ECHO, ls, pwd, etc... I have windows xp and I also have vmware. I hope I am not missing anything! :p (4 Replies)
Discussion started by: Hanamachi
4 Replies

4. Shell Programming and Scripting

perl newbie . &&..programming newbie (question 2)

Hello everyone, I am having to do a lot of perl scripting these days and I am learning a lot. I have this problem I want to move files from a folder and all its sub folders to one parent folder, they are all .gz files.. there is folder1\folder2\*.gz and there are about 50 folders... (1 Reply)
Discussion started by: xytiz
1 Replies

5. Shell Programming and Scripting

OR operator syntax question in AWK script

Hi guys, I confused about syntax used in OR script as follow: I have this sample file separated by "|" containing: January|Month No. 1 February|Month No. 2 March|Month No. 3 April|Month No. 4 May|Month No. 5 June|Month No. 6 July|Month No. 7 August|Month No. 8 September|Month No. 9... (11 Replies)
Discussion started by: cgkmal
11 Replies

6. Shell Programming and Scripting

Modulo calculation in shell script

hi i am writing a progrm to print the even numbers and the code which i am following is as follows #!/usr/bin/bash echo "enter a number a" read a if then echo "the number is even" else echo "the number is odd" fi ~ what is the mistake i am doing ...please tell me (3 Replies)
Discussion started by: harjinder
3 Replies

7. Shell Programming and Scripting

Assignment operator without operand

Does anyone know how this line in bash works? local gotbase= force= nicelevel corelimit local pid base= user= nice= bg= pid_file= local cgroup= These lines are part of the daemon function inside the "functions" file at /etc/init.d in RH. (3 Replies)
Discussion started by: Rameshck
3 Replies

8. What is on Your Mind?

Bug Reporting and Feature Request Tracking on GitHub

Dear All, I created a "new public repo" on GitHub (without the code for now but will post the code there as needed if anyone wants to fix a bug) You can report any forum bugs and report issues in the GitHub "Issues Tab" for this repo here: https://github.com/unixneo/unix.com.bugtracker ... (0 Replies)
Discussion started by: Neo
0 Replies
BN_add(3openssl)						      OpenSSL							  BN_add(3openssl)

NAME
BN_add, BN_sub, BN_mul, BN_sqr, BN_div, BN_mod, BN_nnmod, BN_mod_add, BN_mod_sub, BN_mod_mul, BN_mod_sqr, BN_exp, BN_mod_exp, BN_gcd - arithmetic operations on BIGNUMs SYNOPSIS
#include <openssl/bn.h> int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); int BN_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); int BN_mul(BIGNUM *r, BIGNUM *a, BIGNUM *b, BN_CTX *ctx); int BN_sqr(BIGNUM *r, BIGNUM *a, BN_CTX *ctx); int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *a, const BIGNUM *d, BN_CTX *ctx); int BN_mod(BIGNUM *rem, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx); int BN_nnmod(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx); int BN_mod_add(BIGNUM *r, BIGNUM *a, BIGNUM *b, const BIGNUM *m, BN_CTX *ctx); int BN_mod_sub(BIGNUM *r, BIGNUM *a, BIGNUM *b, const BIGNUM *m, BN_CTX *ctx); int BN_mod_mul(BIGNUM *r, BIGNUM *a, BIGNUM *b, const BIGNUM *m, BN_CTX *ctx); int BN_mod_sqr(BIGNUM *r, BIGNUM *a, const BIGNUM *m, BN_CTX *ctx); int BN_exp(BIGNUM *r, BIGNUM *a, BIGNUM *p, BN_CTX *ctx); int BN_mod_exp(BIGNUM *r, BIGNUM *a, const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx); int BN_gcd(BIGNUM *r, BIGNUM *a, BIGNUM *b, BN_CTX *ctx); DESCRIPTION
BN_add() adds a and b and places the result in r (r=a+b). r may be the same BIGNUM as a or b. BN_sub() subtracts b from a and places the result in r (r=a-b). BN_mul() multiplies a and b and places the result in r (r=a*b). r may be the same BIGNUM as a or b. For multiplication by powers of 2, use BN_lshift(3). BN_sqr() takes the square of a and places the result in r (r=a^2). r and a may be the same BIGNUM. This function is faster than BN_mul(r,a,a). BN_div() divides a by d and places the result in dv and the remainder in rem (dv=a/d, rem=a%d). Either of dv and rem may be NULL, in which case the respective value is not returned. The result is rounded towards zero; thus if a is negative, the remainder will be zero or nega- tive. For division by powers of 2, use BN_rshift(3). BN_mod() corresponds to BN_div() with dv set to NULL. BN_nnmod() reduces a modulo m and places the non-negative remainder in r. BN_mod_add() adds a to b modulo m and places the non-negative result in r. BN_mod_sub() subtracts b from a modulo m and places the non-negative result in r. BN_mod_mul() multiplies a by b and finds the non-negative remainder respective to modulus m (r=(a*b) mod m). r may be the same BIGNUM as a or b. For more efficient algorithms for repeated computations using the same modulus, see BN_mod_mul_montgomery(3) and BN_mod_mul_recipro- cal(3). BN_mod_sqr() takes the square of a modulo m and places the result in r. BN_exp() raises a to the p-th power and places the result in r (r=a^p). This function is faster than repeated applications of BN_mul(). BN_mod_exp() computes a to the p-th power modulo m (r=a^p % m). This function uses less time and space than BN_exp(). BN_gcd() computes the greatest common divisor of a and b and places the result in r. r may be the same BIGNUM as a or b. For all functions, ctx is a previously allocated BN_CTX used for temporary variables; see BN_CTX_new(3). Unless noted otherwise, the result BIGNUM must be different from the arguments. RETURN VALUES
For all functions, 1 is returned for success, 0 on error. The return value should always be checked (e.g., if (!BN_add(r,a,b)) goto err;). The error codes can be obtained by ERR_get_error(3). SEE ALSO
bn(3), ERR_get_error(3), BN_CTX_new(3), BN_add_word(3), BN_set_bit(3) HISTORY
BN_add(), BN_sub(), BN_sqr(), BN_div(), BN_mod(), BN_mod_mul(), BN_mod_exp() and BN_gcd() are available in all versions of SSLeay and OpenSSL. The ctx argument to BN_mul() was added in SSLeay 0.9.1b. BN_exp() appeared in SSLeay 0.9.0. BN_nnmod(), BN_mod_add(), BN_mod_sub(), and BN_mod_sqr() were added in OpenSSL 0.9.7. OpenSSL-0.9.8 Oct 11 2005 BN_add(3openssl)
All times are GMT -4. The time now is 05:59 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy