视觉对象 返回 C++ 中的双精度值
visual Returning a double value in C++
我正在尝试制作一个程序,它给我序列 1!+2/2!+3/3 的总和...........不!这是我的代码。
#include "stdafx.h"
#include<conio.h>
#include <stdio.h>
#include <stdlib.h>
int n;
double sumseries(double sum, double count)
{
double fac = 1, i;
for (i = 1; i <= count; i++)
fac = fac*i;
sum += (count++ / fac);
if (count <= n)
sumseries(sum, count);
else {
printf("sum of series is:%lf", sum);
return sum;
}
}
int main()
{
printf("enter the limit");
scanf_s("%d", &n);
double z = sumseries(0,1);
printf("n%lf",z);
system("pause");
}
现在,当我们从 sumseries() 函数打印总和时,会打印正确的值。但是在下一行中,我们返回总和并将其保存在main()函数的z变量中。当我们尝试打印该值时,它显示 -nan(ind)
我的问题不是如何解决这个问题或如何使这个程序工作。我要问的是导致上述代码中此问题的原因。为什么没有返回正确的值。
在 sumseries
函数中,并非所有流控制路径都返回值。
你至少应该写
if (count <= n)
return sumseries(sum, count);
而不是
if (count <= n)
sumseries(sum, count);
编译器应该给你一个警告,甚至是问题的错误。如果没有,请将警告级别调高。
您有一个递归函数 sumseries,但您不会从导致末尾的所有路径返回值。因此,返回值是不确定的。
递归函数不只是返回一次,你必须从每一步返回。在这种情况下,您返回最后一个值,但对函数的上一个调用会丢弃它。您需要不断退回它。因此,您需要使用
return sumseries(sum, count);
以继续将值返回到上一步。
sumseries() 中的控制流可能会到达其末尾并返回未定义的值。您需要在代码中使这种情况变得不可能。可能你想使用这个语句:
if (count <= n)
return sumseries(sum, count);
而不仅仅是
if (count <= n)
sumseries(sum, count);
相关文章:
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 正在将csv文件读取为双精度矢量
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 如何在C++中的同一函数中使用字符串和双精度
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 检查是否以特定精度给出双精度
- 转换函数,将 std::数组的双精度作为参数或双精度作为参数单独转换
- C 字符串返回字符串的整数/双精度/长整型值
- 为什么将双精度转换为 int 似乎在第 16 位数字之后将其四舍五入?
- 如何使双精度值的 C++ 和 C# 中的结果相同
- 使用浮点数和双精度数的非常小数字的数学
- 使用 Xcode 将双精度存储在数组C++中
- 在 C++ 中将双精度变量写入二进制文件
- 如何从字符串转换为双精度*
- 为什么我的数组双精度函数不起作用?
- 高精度双精度的 Sprintf 格式化问题
- C++ cout 将双精度对齐到精度 2 并正确对齐
- 将指针数组分配给双精度
- C++如何将字符串逐行转换为双精度
- 长双精度C++是IEEE二进制128的实现吗?