Tại sao kết quả in số thập phân bị sai?

#include<iostream>
#include<math.h>
#include <iomanip>
using namespace std;
float b16(long n,float x)
{
	long a=0;
	float s=0;
	for(int i=1;i<=n;i++)
	{
		a=a+i;
		s=s+(1.0*pow(x,i))/a;
	}
cout<<setprecision(16)<<s;
}
int main()
{
	long n;
	float x;
	cin>>n>>x;
	b16(n,x);	
	return 0;
}

mình có đoạn code thế này

Input 3 2
OutPut 4.666666666666667

mà sao mình làm toàn ra kiểu dữ liệu thế này 4.666666507720947
không như kết quả đề cho có cách nào sửa ko ạ tks all

Chính là do pow :smiley: n là số nguyên mà.

1 Like

thế làm sao để sửa bạn

Không dùng pow xem sao chứ số mũ là số nguyên mà.

1 Like

bí r bác ơi @@! :<<<<<<<<<<<<<<<<<

thay vì dùng pow, bạn tự viết hàm tính luỹ thừa dựa trên vòng lặp thì sẽ chính xác hơn

1 Like

Làm xong hàm mũ thì bạn chuyển qua dùng double luôn :smiley: chứ 16 chữ số thập phân thì float không đáp ứng được.

à bác ơi tui ko cần xài hàm mũ mà chuyển sang long double s là ra luôn

#include<iostream>
#include<math.h>
#include <iomanip>
using namespace std;

void b16(long n,float x)
{
	int a=0;
	long double s=0;
	for(int i=1;i<=n;i++)
	{

		a=a+i;
		s=s+pow(x,i)/a;
	}
	cout<<setprecision(16)<<s;
}
int main()
{
	long n;
	float x;
	cin>>n>>x;
	b16(n,x);	
	return 0;
}
1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?