我正在使用一个函数,但代码不起作用。我将函数分解为几个部分,并尝试自己了解发生了什么。我懂了:
int res;
res = (1 / 2) * 2 + 2;
printf("%d", res);
Run Code Online (Sandbox Code Playgroud)
自己算算:
(1 /2) = 0.5
0.5 * 2 = 1
1 + 2 = 3
(1 / 2) * 2 + 2 = 3,对吧?
但是,当我运行代码时,它给出的输出为“2”,而不是“3”。
当我尝试这个时:(将 '(1 / 2)' 变为 '0.5')
int res;
res = 0.5 * 2 + 2;
printf("%d", res);
Run Code Online (Sandbox Code Playgroud)
我得到的预期输出为“3”,这很奇怪,因为上面的示例理论上与下面的示例相同。这是否与我的编译器不知道简单的数学优先规则有关?
在使用 .x86 程序集除以 0 时,出现 SIGFPE 异常idiv。我如何从汇编中禁用它?我需要系统调用还是可以直接在 x86 中完成?
再生产:
测试.asm
default rel
global WinMain
section .data
section .text
WinMain:
mov rcx, 0
mov rdx, 0
idiv rcx
Run Code Online (Sandbox Code Playgroud)
命令:
nasm -f win64 test.asm
gcc test.obj
gdb a
运行
我试图划分整数但结果得到0.我只是不明白我做错了什么.我在这个例子中只使用了int,但是用float或double得到了相同的结果测试.
我使用的代码是:
int wrongAnswers = askedQuestions - playerResult;
int percentCorrect = (playerResult / askedQuestions) * 100;
int percentWrong = (wrongAnswers / askedQuestions) * 100;
NSLog(@"askedQuestions: %i", askedQuestions);
NSLog(@"playerResult: %i", playerResult);
NSLog(@"wrongAnswers: %i", wrongAnswers);
NSLog(@"percentCorrect: %i", percentCorrect);
NSLog(@"percentWrong: %i", percentWrong);
NSLog(@"calc: %i", (wrongAnswers + playerResult));
NSLog(@"wrong answers %: %i %%", ((wrongAnswers / askedQuestions) * 100));
Run Code Online (Sandbox Code Playgroud)
我得到的结果是:
2011-01-09 16:45:53.411 XX [8296:207] askQuestions:5
2011-01-09 16:45:53.412 XX [8296:207] playerResult:2
2011-01-09 16:45:53.412 XX [ 8296:207] wrongAnswers:3
2011-01-09 16:45:53.413 XX [8296:207] percentCorrect:0%
2011-01-09 16:45:53.414 XX [8296:207] …
为什么这个计算:双数=(13 /(13 + 12 + 13))
等于0?
我认为它应该在0.34左右!
谢谢!
是否有可能将两个整数分成两个整数并从中生成一个BigDecimal?我正在尝试优化我的代码.如果我可以减少我声明新BigDecimal的次数,它应该会显着加快我的过程.截至目前,我知道如何减少我的计算最多的是:
BigDecimal tester = new BigDecimal("103993")
.divide(new BigDecimal("33102"), 2000, BigDecimal.ROUND_DOWN);
Run Code Online (Sandbox Code Playgroud)
我想知道是否有可能做这样的事情:
int example1 = 103993;
int example2 = 33102;
BigDecimal example3 = example1/example2;
Run Code Online (Sandbox Code Playgroud)
或类似的规定.我唯一的目标是加快执行时间.
int main (void)
{
int fahrenheit; // fahrenheit stands for fahrenheit
double c; // c stands for celsius
printf("Enter your fahrenheit, we'll covnvert it into celsius! ");
scanf("%f", &fahrenheit);
c = 5/9 * (fahrenheit - 32);
printf("Here is your %f in celsius!.\n");
return (0);
}
Run Code Online (Sandbox Code Playgroud)
我通过断点跟踪代码,当它输入我的输入时,计算结束,但公式是正确的.某种逻辑错误,我无法指责.请帮忙!
我正在尝试做的是使用while循环来检查userNum%2> 1一旦它击中一个我希望它停止并打印出除法的所有值,例如
如果20是用户num,它将生成.20/2和10/2和5/2然后2/2导致1然后停止(整数除法)
import java.util.Scanner;
public class DivideByTwoLoop {
public static void main (String [] args) {
int userNum = 0;
userNum = 20;
while ( (userNum % 2) > 1){
userNum = userNum / 2;
System.out.println(userNum );
}
System.out.println("");
return;
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我到目前为止所拥有的.任何帮助是极大的赞赏.
我注意到EDX包含一些随机默认值,如00401000,然后我使用这样的DIV指令:
mov eax,10
mov ebx,5
div ebx
Run Code Online (Sandbox Code Playgroud)
它会导致INTEGER OVERFLOW ERROR.但是,如果我设置edx为0并执行相同的操作.我相信使用div会导致商重写eax和其余覆盖edx.
获得此INTEGER OVERFLOW ERROR确实让我感到困惑.
我试着在Lisp中做分工.当我这样做时(/ 5 2),结果是5/2,但我需要的是2.
我怎样才能做到这一点?
我对Python有点新鲜.我在下面附上了一段代码.constant_a&b是整数.运行此代码时,我收到以下错误:
回溯(最近一次调用最后一次):文件"U:\ V10_run2\process.py",第209行,delta_mcs_2_gfx_percentage =(delta_mcs_2_gfx*100)/ float(mcs)ZeroDivisionError:浮点除零
mcs=hash["MCF"]*constant_a/constant_b
if mcs is 0:
delta__percentage=-100
else:
delta__percentage=(delta*100)/mcs
Run Code Online (Sandbox Code Playgroud)
正如错误所说,我认为这是因为python试图进行整数除法float(delta*100)/float(mcs)并将mcs舍入为0但我也尝试过这也没有帮助.有什么建议 ??
integer-division ×10
assembly ×2
c ×2
java ×2
x86 ×2
bigdecimal ×1
c# ×1
common-lisp ×1
floating ×1
iphone ×1
math ×1
objective-c ×1
python ×1
while-loop ×1
x86-64 ×1