首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义正弦函数中的错误

自定义正弦函数中的错误
EN

Stack Overflow用户
提问于 2021-10-27 02:41:42
回答 1查看 45关注 0票数 0

我正在为一种非常简单的编程语言制作一个正弦函数的原型(即,限制仅限于符号整型变量,以及变量之间的运算)。但是,对于大于或等于0.9的"s“给定值,似乎每个弧度都有一个误差。此错误似乎是偏移量1,然后是小范围的-1 (这都在相同的错误范围内-1和-1是连续的,两者之间没有任何正确的输出值)。这个错误不会出现在具有相同函数的desmos图上( desmos图中的错误是近似值之间的一个小跳跃)。我确实认为pi和tau的近似值会有问题,但它似乎给了"s“一个更大的值。我的代码如下:

代码语言:javascript
复制
#include <iostream>

int sin(int x, int s1, int s2)
{
  int p = x;
  int pi = 314159;
  int k = 1000;
  int tau = 628318;
  int six = 6;
  int oneHundredTwenty = 120;
  int fiveThousandFourty = 5040;
  int ans;
  int a3;
  int a5;
  int a7;
  float s = 0.9;

  pi *= s;
  pi /= 100;
  tau *= s;
  tau /= 100;
  k *= s;

  p %= tau;
  p -= pi;

  a3 = p;
  a5 = p;
  a7 = p;

  ans = p;


  a3 *= p;
  a3 /= k;
  a3 *= p;
  a3 /= k;
  a3 /= six;

  a5 *= p;
  a5 /= k;
  a5 *= p;
  a5 /= k;
  a5 *= p;
  a5 /= k; 
  a5 *= p;
  a5 /= k;
  a5 /= oneHundredTwenty;

  a7 *= p;
  a7 /= k;
  a7 *= p;
  a7 /= k;
  a7 *= p;
  a7 /= k;
  a7 *= p;
  a7 /= k;
  a7 *= p;
  a7 /= k;
  a7 *= p;
  a7 /= k;
  a7 /= fiveThousandFourty;

  ans -= a3;
  ans += a5;
  ans -= a7;

  return 30 + ans / 33;

}

int main()
{

  for(int i = 0; i < 1000; i ++)
  {
    for(int j = 0; j < sin(i * 100, 1, 1); j ++)
    {
      std::cout << "#";
    }
    std::cout << "\n";
  }
  return 0;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-27 03:31:45

您的a7变量溢出。

在您的代码中,a7的值最大为2,431,570,725,最小为-2,443,460,910。您的int范围可能差不多,但不完全是那么大。INT_MAX的典型值为2,147,483,647。

将其更改为longlong long或类似的内容。

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

https://stackoverflow.com/questions/69732129

复制
相关文章

相似问题

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