Overflow in C++
Overflow in C++
So..
这是代码:
#include <iostream>
#include <limits>
#include <math.h>
using namespace std;
int main()
{
unsigned long long i,y,n,x=45;
unsigned long long factorial = 1;
for(n = 0; n <= 5; n++)
{
y = (pow(-1,n)*pow(x,2*n)) / factorial;
cout << "COS IS " << y << endl;
}
for(int i = 1; i <=n; i++)
{
factorial *= 2*i;
}
}
我溢出了,但我真的不知道为什么。我使用未签名的长长只是为了确保我不会得到但是..我仍然明白。甚至仅限于少量。我试图实现这一点:
https://en.wikibooks.org/wiki/Trigonometry/Power_Series_for_Cosine_and_Sine
但是由于溢出,我真的做不到。你对我能做什么有什么想法吗?我是编程新手,所以请放轻松:D
有很多问题。
- 当应使用浮点类型时,请使用整数类型
- 使用无符号类型进行有符号计算
- 不使用弧度,而是使用度(45° ≈ 0.78539 弧度( 你不计算循环
- 中的阶乘,它总是 1,你只在循环结束时计算它,但为时已晚,无论如何你对阶乘的计算都是错误的。
- 算法是错误的,它只是没有按照麦克劳林的疗法做,你需要总结术语,但你只是打印术语。
你可能想要这个:
#include <iostream>
#include <cmath>
using namespace std;
long factorial(int n)
{
long result = 1;
for (int i = 1; i <= n; i++)
result *= i;
return result;
}
int main()
{
double x = 0.785398163397448309616; //PI/4 expectd result COS(PI/4) = 0.7071067
double mycosinus = 0;
for (int n = 0; n <= 5; n++)
{
mycosinus += (pow(-1, n) * pow(x, 2 * n)) / factorial(2*n);
cout << "COS IS " << mycosinus << endl;
}
}
这是计算 5 阶乘的错误算法:
int main()
{
int n = 5;
int factorial = 1;
for (int i = 1; i <= n; i++)
{
factorial *= 2 * i;
}
cout << "factorial 5 = " << factorial << endl;
}
计算值为 3840 而不是 120。我让你自己找出问题所在。
为了执行这种数学运算,你需要使用像float
这样的浮点数,或者double
而不是像long
、int
或long long
这样的整数类型,因为 sin 和 cos 都可以返回你也不应该使用的负数unsigned
。
相关文章:
- netcat command in c++
- Difference in displaying cv2 Mat
- C++ MFC Libraries in Travis CI
- 如何在OpenSSL中从configuration.h.in获取configuration.h
- 创建具有 new in 函数和"this is nullptr"异常的对象
- IN, OUT, INOUT Parameters
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 有人安装"IITB Simplecpp in mac"吗?
- 从 C 样式字符串中删除子字符串 "in place" 在C++代码中
- 如何修复"error: ‘_1’ was not declared in this scope"?
- Softmax Implementation in C++
- 将 out/in out 参数与 if/switch 的 init 语句一起使用
- IF-nesting in c++
- Gurobi GRBModel and GRBmodel in C++
- Tensorflow Hub in C++
- Centos7 g++ "to_string is not in a member of std"
- InitializeCriticalSectionEx Not Located In KERNEL32.Dll
- 将 lambda 表达式传递给 std::function in C++
- @CPPFLAGS@在 Makefile.in 中意味着什么?
- std::async from std::async in windows xp