我这里有一个程序使用级数来近似 pi 的值,并需要它以一定的精度输出 pi,我选择了 16 位数字。然而,当我输入 0 进行求和时,它返回 4(这是正确答案),但没有小数。我的其余输入的精度为 16。
#include <iostream>
#include <iomanip>
#include <string>
using std::cin;
using std::cout;
using std::endl;
int myPrompt(void);
double mySum(int);
void myResults(void);
int main() {
myResults();
return 0;
}
int myPrompt(void) {
cout << "Approximating pi using the Madhava-Leibniz series" << endl
<< std::setfill('=') << std::setw(std::size("Approximating pi using the Madhava-Leibniz series")) << "" << endl;
int input;
do {
cout << "Please input an integer greater than or equal to 0: ";
cin >> input;
} while (input < 0);
return input;
}
double mySum(int input) {
double numerator = -1;
double output = 0;
int base = -1;
for (int k = 0; k <= input; k++) {
numerator *= base;
output += numerator / ((2 * k) + 1);
}
return (output * 4);
}
void myResults(void) {
int userInput = myPrompt();
double output = mySum(userInput);
cout << std::setprecision(16) << "The approximated value of pi is: " << output << endl;
}
Run Code Online (Sandbox Code Playgroud)
我尝试将多个变量类型设置为 double 假设它只是返回一个整数,但我似乎找不到原因。我只需要它输出 4,精度为 16 位。任何帮助表示感谢,谢谢!
我认为问题在于如何std::cout显示浮点数。当您使用 设置精度时std::setprecision(16),它会影响显示的小数位数,但它不保证如果 16 位小数为零,则将显示所有 16 位小数。
除了设置精度之外,您还可以使用std::fixed和:std::showpoint
void myResults(void) {
int userInput = myPrompt();
double output = mySum(userInput);
cout << std::fixed << std::showpoint << std::setprecision(16) << "The approximated value of pi is: " << output << endl;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |