0

数学にある程度の知識がある人は笑うかもしれませんが、数学の表記規則の多くを覚えていないので、これを C コードに変換する手助けが必要です。あなたの助けは大歓迎です:

                                         214
          10,000 {(10,000 × [1+.0599/365]   )} +300
answer = ────────────────────────────────────────────
                                   214
                     .1+(1+(i/365))
4

4 に答える 4

12

それを翻訳するプログラムをお探しですか、それとも1回限りの変換をお探しですか?1回限りのコンバージョンであれば、それほどエキサイティングではありません。

私があなたの構文を正しく読んだと仮定すると:

double ans = 10000 * (10000 * pow(1.0 + 0.0599 / 365, 214) + 300;
ans /= (0.1 + pow(1.0 + (i / 365.0), 214));

ただし、指数の高さまで物事を上げて分割することには問題があるかもしれません。多くの場合、ログに変換し、ログスペースで計算を行い、後で変換する必要があります。

それはどのように見えるかもしれません:

double lognumerator = log(10000) + log(10000) + 214 * log(1 + 0.0599 / 365);
double logdenominator = log(0.1 + exp(214 * log(1.0 + (i / 365.0))));
double ans = exp(lognumerator - logdenominator) + exp(log(300) - logdenominator);

ログを使用すると、アンダーフローにぶつかるのを防ぐことができます。アンダーフローは、これらのタイプの計算で非常によく当てはまる可能性があります。

于 2010-09-14T21:05:34.320 に答える
2

シンプル - 注意すべきいくつかのよくある間違いです。

'c' が計算を整数ではなく浮動小数点演算として扱うように、定数の後に (特に分母に) .0 を付けます。
'C' では 100/1000 は 0 100/1000.0 は 0.1

ブラケットを自由に使用してください。優先順位のルールを覚えているとは限りません。

乗算にはどこでも * を使用する必要があります 3(1+2) は乗算ではありません。

x^y には pow(x,y) 関数を使用します。最新の C++ コンパイラには、y が整数である最適化されたバージョンがあるため、x^2 は x^2.0 よりもはるかに高速です。

于 2010-09-14T21:03:18.007 に答える
0
(10000.0 ( ( 10000.0 * pow(1 + 0.0599/365.0, 214.0))) + 300.0 ) / (1 + pow(1 + i/365.0, 214.0))

私はそれを正しく理解したと思います。:)

于 2010-09-14T21:04:18.520 に答える
0

pow(x,y)電力を計算する関数をお探しですか?

于 2010-09-14T20:59:54.863 に答える