在JavaScript中,我如何获得:
对于此代码块:
int num = 5;
int denom = 7;
double d = num / denom;
Run Code Online (Sandbox Code Playgroud)
价值d是0.0.它可以通过强制转换来强制工作:
double d = ((double) num) / denom;
Run Code Online (Sandbox Code Playgroud)
但还有另一种方法可以获得正确的double结果吗?我不喜欢铸造原始人,谁知道会发生什么.
我一直在阅读div和mul组装操作,我决定通过在C中编写一个简单的程序来实现它们:
#include <stdlib.h>
#include <stdio.h>
int main()
{
size_t i = 9;
size_t j = i / 5;
printf("%zu\n",j);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后生成汇编语言代码:
gcc -S division.c -O0 -masm=intel
Run Code Online (Sandbox Code Playgroud)
但是看生成的division.s文件,它不包含任何div操作!相反,它通过位移和魔术数字来做某种黑魔法.这是一个计算代码片段i/5:
mov rax, QWORD PTR [rbp-16] ; Move i (=9) to RAX
movabs rdx, -3689348814741910323 ; Move some magic number to RDX (?)
mul rdx ; Multiply 9 by magic number
mov rax, rdx ; Take only the upper 64 bits of the …Run Code Online (Sandbox Code Playgroud) 例如,
int result;
result = 125/100;
Run Code Online (Sandbox Code Playgroud)
要么
result = 43/100;
Run Code Online (Sandbox Code Playgroud)
结果总会成为师的底线吗?什么是定义的行为?
我怎样才能在Python中找到数字的除法余数?
例如:
如果数字为26且分割数为7,则除数余数为5.
(因为7 + 7 + 7 = 21和26-21 = 5.)
我写的是这段代码:
public static void main(String[] args) {
double g = 1 / 3;
System.out.printf("%.2f", g);
}
Run Code Online (Sandbox Code Playgroud)
结果是0.为什么这样,我该如何解决这个问题?
为什么在下面的代码片段中呢?
int a = 7;
int b = 3;
double c = 0;
c = a / b;
Run Code Online (Sandbox Code Playgroud)
c最终得到的值是2,而不是2.3333,正如人们所期望的那样.如果a和b双打,答案就变成2.333.但肯定是因为c 已经是双重它本来应该使用整数?
那怎么来int/int=double不行?
Javascript中是否有任何函数可以让你进行整数除法,我的意思是在int中得到除法答案,而不是浮点数.
var x = 455/10;
// Now x is 45.5
// Expected x to be 45
Run Code Online (Sandbox Code Playgroud)
但我希望x为45.我试图消除数字中的最后一位数字.
我知道Python//向负无穷大舍入,而在C++中则/是截断,向0舍入。
到目前为止,这是我所知道的:
|remainder|
-12 / 10 = -1, - 2 // C++
-12 // 10 = -2, + 8 # Python
12 / -10 = -1, 2 // C++
12 // -10 = -2, - 8 # Python
12 / 10 = 1, 2 // Both
12 // 10 = 1, 2
-12 / -10 = 1, - 2 // Both
= 2, + 8
C++:
1. m%(-n) == m%n
2. -m%n == -(m%n)
3. (m/n)*n …Run Code Online (Sandbox Code Playgroud)