首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >asm(x87)中sin()结果的总和

asm(x87)中sin()结果的总和
EN

Stack Overflow用户
提问于 2012-11-04 03:40:13
回答 2查看 296关注 0票数 1

我需要计算y(i) = sin(5*i)的度数和,其中i在每次迭代时都会增加。我需要在和大于3之前计算它,并在和大于3时找到i

使用下面的代码,我得到了一个无限循环:

代码语言:javascript
复制
int main() {

float Sum=0;
long i=0;
long A=5;
long B=180;
int C=3;

 _asm{
   finit
 m1:
   inc i
   fldpi    ; load PI
   fmul i   ; PI * i 
   fmul A   ; PI * i * 5
   fdiv B   ; PI * i * 5 / 180 (value in degree)
   fsin ; sin(PI * i * 5 / 180)
   fadd Sum ; counter all lopps result
   ficom C  ; check if lower than 3 go to m1 
   jg m1
 }  
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-04 10:13:55

有几个问题。

  1. FMUL需要浮点参数,但您传递的long.
  2. FICOM仅设置了FPU标志,您必须将它们移到CPU或使用FCOMI.
  3. JG检查错误的标志,您需要检查进位标志。
  4. 您的代码不平衡浮点堆栈。

奖励:由于5*PI/180是常数,你可以预先计算出来。

您可以使用如下代码(针对您的编译器语法进行调整,这是针对gnu汇编程序的):

代码语言:javascript
复制
.intel_syntax noprefix
.globl main
main:
    sub esp, 16               # allocate space for i, sum and fmt
    mov dword ptr [esp+4], -1 # i
    fild dword ptr [limit]    # limit
    fldz                      # sum
1:
    inc dword ptr [esp+4]     # i += 1
    fild dword ptr [esp+4]    # i
    fmul qword ptr [factor]   # i * factor
    fsin
    faddp                     # add to sum
    fcomi st, st(1)           # check if below limit
    jb 1b
    fstp qword ptr [esp+8]    # store on stack for printf
    fstp st(0)                # remove limit from fpu stack
    mov dword ptr [esp], offset fmt
    call printf
    add esp, 16               # clean up stack
    xor eax, eax              # return value
    ret

.data
factor: .double .08726646259971647884 # 5 * PI / 180
limit: .int 3
fmt: .string "i=%d sum=%g\n"

See in operation.

票数 4
EN

Stack Overflow用户

发布于 2012-11-04 14:08:45

也许这是离题的,但是使用简单的三角恒等式,你可以用一个简单的公式计算出没有任何循环的任意和值的答案:

代码语言:javascript
复制
i=ceil(acos(cos(t/2)-2*result_sum*sin(t/2))/t-0.5)

其中t是您的步长角(5度),result_sum需要的连续正弦的累积和(在您的情况下=3)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13212795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档