我想在 -pi/pi 之间包裹弧度。
这是我所做的实际代码,它有效:
radians > gPIf ? radians - g2PIf : radians < -gPIf ? radians + g2PIf : radians;
Run Code Online (Sandbox Code Playgroud)
但我不太喜欢它。尝试使用 mod,但似乎我对负值有问题:
std::fmod(radians + gPIf, g2PIf) - gPIf
Run Code Online (Sandbox Code Playgroud)
是否有任何“mod”也适用于负数?
即 -20 mod 360 与操作系统计算器返回 340 :)
我有一个小函数来计算 mod 如下:
double mod(double a, double b){
return a-floor(a/b)*b;
}
Run Code Online (Sandbox Code Playgroud)
mod(1e15,3) 正确返回 1,但 mod(1e16,3) 由于乘法中的数值舍入错误而返回 0。但是使用 std::fmod(1e16,3) 可以正常工作并返回 1。有谁知道他们是如何避免这个问题的?
我正在寻找VBA脚本的一些帮助.我一直试图弄清楚如何使用mod函数.
这是我到目前为止所做的:
Function AddOddNumbersWithMod(nr)
Dim i, sum
sum = 0
For i = (IF 1 MOD 2 = 0) to nr step 1
sum = sum + i <-- (calculate all the odd numbers before nr)
Next i
End Function
Run Code Online (Sandbox Code Playgroud)
任何建议将不胜感激.
在Kotlin中,我看到函数a.mod(n)if a为负数,结果为负数.这不是什么模数是要做的.我能做些什么来保持积极的模数?
例如:
(-2).mod(9)
Run Code Online (Sandbox Code Playgroud)
回来-2,应该是7.
我写了一个代码,它在两个数相除后找出商,但不使用乘法、除法或 mod 运算符。
我的代码
public int divide(int dividend, int divisor) {
int diff=0,count=0;
int fun_dividend=dividend;
int fun_divisor=divisor;
int abs_dividend=abs(dividend);
int abs_divisor=abs(divisor);
while(abs_dividend>=abs_divisor){
diff=abs_dividend-abs_divisor;
abs_dividend=diff;
count++;
}
if(fun_dividend<0 && fun_divisor<0){
return count;
}
else if(fun_divisor<0||fun_dividend<0) {
return (-count);
}
return count;
}
Run Code Online (Sandbox Code Playgroud)
我的代码通过了像股息=-1、除数=1 或除数=1 和除数=-1 之类的测试用例。但是它不能通过像dividend = --2147483648和divisor =-1这样的测试用例。但是,当两个输入都为负时,我有一个 if 语句。
if(fun_dividend<0 && fun_divisor<0){
return count;
}
Run Code Online (Sandbox Code Playgroud)
当我的输入是 -2147483648 和 -1 时,它返回零。我调试了我的代码,发现它无法到达while循环的内部语句。它只是检查while循环并终止并执行
if(fun_dividend<0 && fun_divisor<0){
return count;
}
Run Code Online (Sandbox Code Playgroud)
很明显,两个输入都是负数,所以我使用Math.abs函数使它们成为正数。但是当我尝试查看变量 abs_dividend 和 abs_divisor 的值时,它们显示负值。
整数最大值可以是 9 位数字。那么我怎么能通过这个测试用例呢?根据此测试用例,股息是一个 10 位数字,对于整数范围无效。
根据测试用例,我得到的输出应该是 …
我该如何解决这个问题?我对如何启动感到困惑。键34、25、79、56、6将插入长度为11的哈希表中,其中冲突将通过开放寻址解决。哈希函数为h(k,i)=(k mod11 + i(1 + k mod10))mod11 a。计算上述每个键的探测顺序。
在下面的代码,我希望确保有偶数theImageRand等于theImage或theImage2的机会,但我意识到,在1和100之间有更多数字等于2模1比2模0,所以被选择theImage不成比例的时间.
这是我遇到的最简单的想法,但也许有一个功能可以做到这一点更容易?我也在想我能找到一个符合我要求的数字并把它放到randi(n)中.
xRand = randi(100);
if mod(xRand,2) == 1
theImageRand = theImage;
elseif mod(xRand,2) == 0
theImageRand = theImage2;
end
Run Code Online (Sandbox Code Playgroud)
如果我能更清楚地解释,请告诉我.提前致谢.
我需要在C中执行一个真正的数学模.我有理由允许模数参数的负数,因为我的模块计算会产生负中间结果,必须将其放回到最少残留系统中.但是,我写道,允许负面模块是没有意义的
unsigned int mod( int x, unsigned int m )
{
int r = x % m;
return r >= 0 ? r : r + m;
}
Run Code Online (Sandbox Code Playgroud)
然而,使用负数和正模块调用此类函数
printf("%u\n", mod(-3, 11));
Run Code Online (Sandbox Code Playgroud)
产生输出
1
Run Code Online (Sandbox Code Playgroud)
我不明白为什么.你能解释一下吗?
编辑:我知道运算符%与数学模数不同,我知道如何定义正数和负数.我问的是它会为不同的签名做些什么,而不是不同的标志.
在哈斯克尔,
这很好用:(mod 9) 7.它给出了预期的结果:当9除以7(2)时的余数.
同样,这也有效:(mod 9) 9.它返回0.
这让我觉得(mod 9 == 0) 9应该回归True.然而,事实并非如此:它反而引发了错误.
错误:
<interactive>:62:1: error:
• Couldn't match expected type ‘Integer -> t’
with actual type ‘Bool’
• The function ‘mod 9 == 0’ is applied to one argument,
but its type ‘Bool’ has none
In the expression: (mod 9 == 0) 9
In an equation for ‘it’: it = (mod 9 == 0) 9
• Relevant bindings …Run Code Online (Sandbox Code Playgroud) 给定一个数n,找出通过连接前n 个自然数的二进制表示形式形成的数字的十进制值。
打印答案模 10^9+7。
此外,n可以大到 10^9,因此需要对数时间方法。
例如:n = 4,答案 =220
解释:数字形成= 11011100( 1=1, 2=10, 3=11, 4=100)。11011100= 的十进制值"220"。
我在下面使用的代码仅适用于第一个整数N<=15
String input = "";
for(int i = 1;i<=n;i++) {
input += (Integer.toBinaryString(i));
}
return Integer.parseInt(input,2);
Run Code Online (Sandbox Code Playgroud)