codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#include <stdio.h> // ここに、計算したい式を書く static double _calc(double a) { return ((20 * a) + (a * a)); } static double calc(double target) { double a=1; double old_a=0; double ans=0; while (1){ ans = _calc(a); if (ans > target) { break; } old_a = a; a *= 2; } double la,ha; ha = a; la = old_a; double add; while (1) { printf("答えは[%.8lf]よりも小さくて, [%.8lf]よりも大きい数のはず。今は[%.8lf]\n",ha,la,a); ans = _calc(a); // 答えとの差が 10 * (0.1 * 0.1 * 0.1 * 0.1 * 0.1 * 0.1) よりも少なくなったら、答えと考える if ((ans < target) && ((target - ans) < 1e-6)) { return (a); } // 上限と、下限の、範囲をすこしずつ狭めながら、 // a に、上限と下限の真ん中の数字をセットしていく // もしも答えが大きければ、 if (ans > target) { // もしも上限が a よりも大きければ、新しい上限を a にする if (ha > a) { ha = a; } // a に、上限と下限の、真ん中の数字をセット add = (ha - la) / 2; a -= add; } // もしも答えが小さければ、 else if (ans < target) { // もしも上限が a よりも小さければ、新しい上限を a にする。 if (la < a) { la = a; } // a に、上限と下限の、真ん中の数字をセット add = (ha - la) / 2; a += add; } getchar(); // キー入力があるまで止まる } } void main() { printf("答え:[%.8lf]\n",calc(200)); }
Private
[
?
]
Run code
Submit