我正在为一种非常简单的编程语言制作一个正弦函数的原型(即,限制仅限于符号整型变量,以及变量之间的运算)。但是,对于大于或等于0.9的"s“给定值,似乎每个弧度都有一个误差。此错误似乎是偏移量1,然后是小范围的-1 (这都在相同的错误范围内-1和-1是连续的,两者之间没有任何正确的输出值)。这个错误不会出现在具有相同函数的desmos图上( desmos图中的错误是近似值之间的一个小跳跃)。我确实认为pi和tau的近似值会有问题,但它似乎给了"s“一个更大的值。我的代码如下:
#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;
}发布于 2021-10-27 03:31:45
您的a7变量溢出。
在您的代码中,a7的值最大为2,431,570,725,最小为-2,443,460,910。您的int范围可能差不多,但不完全是那么大。INT_MAX的典型值为2,147,483,647。
将其更改为long或long long或类似的内容。
https://stackoverflow.com/questions/69732129
复制相似问题