#14920: 浮點數誤差QQ


inversion (「我們所認識的可符香是個像天使的好女孩」之葉林 *Cries...)

學校 : 國立清華大學
編號 : 43537
來源 : [49.159.6.107]
最後登入時間 :
2022-05-28 19:29:12
d315. sigma sinkx -- david | From: [49.158.83.43] | 發表日期 : 2018-08-14 22:27

吃了11個WA還是解不出來,而先前也有不少人跟我一樣錯line: 2

有大大知道怎麼解決比較好嗎?XD

 

以下是開始亂改前的正常程式碼XD

#include <iostream>
#include <iomanip>
#include <string>
#include <cmath>
using namespace std;
#define pi 3.1415926

int main() {
	string times;
	int degree, Ndegree;
	double radian, Nradian, buffer1, buffer2, cosnx, cosx, sinnx, sinx;
	while (cin >> times >> degree, times != "0") {
		degree %= 360, radian = degree * pi / 180, Ndegree = 0;
		for (int i = 0; i != times.size(); i++)
			Ndegree *= 10, Ndegree += int(times[i] - '0'), Ndegree %= 360;
		Nradian = ((Ndegree * degree) % 360) * pi / 180;
		cosnx = cos(Nradian), cosx = cos(radian), sinnx = sin(Nradian), sinx = sin(radian);
		buffer1 = -0.5 * sinnx + (sinx - sinx * cosnx) / (2. - 2 * cosx);
		buffer2 = sinx * sinnx / (2. - 2 * cosx) + 0.5 - 0.5 * cosnx;
		printf("%.4f\n", buffer1 * cosx + buffer2 * sinx);
	}
}



話說,這種有浮點數的題目真的很難出耶
一不小心就會演變成,不少人在那邊調誤差,看看能不能AC,尤其是有公式題的(難以推導的公式更明顯)XD
 
ZeroJudge Forum