• 締切済み

コーディング

実数型のfloatとdoubleの変数を宣言して0で初期化しなさい。それぞれに0.01を1万回加えて、その結果を確かめなさい。  宜しくお願いします。

みんなの回答

  • qwertfk
  • ベストアンサー率67% (55/81)
回答No.6

もう少しmpl風に #include <iostream> template<int i,typename is_true,typename is_false> struct mpl_is_zero { typedef typename is_false type; }; template<typename is_true,typename is_false> struct mpl_is_zero<0,is_true,is_false> { typedef typename is_true type; }; template<typename T> struct NoAdd { static T value(T val) { return val; } }; template<typename T,int i> struct AddVal { static T value(T val) { return mpl_is_zero< i, NoAdd<T>, AddVal<T,i-1> >::type::value(val) + T(0.01); } }; int main(void) { float f(0); std::cout << AddVal<float,10000>::value(f) << std::endl; double d(0); std::cout << AddVal<double,10000>::value(d) << std::endl; return 0; }

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.5

一応 C++, のつもり>#4. 元の質問を読めばわかるけど言語が指定されてないので, C だろうと C++ だろうとカテゴリ的には OK. 意味としては, AddFraction<T, n> で「T型の変数に対して 0.01 を n 回加算する」ということ. あ~, AddFraction のコンストラクタに「加算する値」も追加すべきだったかなぁ. つまり template <typename T, int n> class AddFraction { AddFraction<T, n-1> inner; public: AddFraction(T& var, const T step) : inner(var, step) { } }; みたいな感じ. これなら 0.01 に限定しなくていいので汎用性があるね. もしくは template <typename T, int n> inline addFraction(T &var) { var = 0; return AddFraction<T, n>(var); } って関数を作っておくと auto a = addFraction<10000>(f); みたいに書けてきれいかも. ついでにいうと「ここ」が「ネタスレ」なるものである, ということではないです. ただ, このように「どこをどう見ても自分で努力しているような気配がない」質問に対しては, 無視されたり「読みにくいプログラムコンテスト」の題材にされたりすることがあります.

回答No.4

#3はC++? 合ってるのかどうかまったくわからん。 ここ実はネタスレ?

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

#include <iostream> template <typename T, int n> class AddFraction { AddFraction<T, n-1> inner; public: AddFraction(T &var) : inner(var) { } T &operator()() const { inner(); var += 0.01; return var; } }; template <typename T> class AddFraction<T, 0> { T &v; public: AddFraction(T &var) : v(var) { } T &operator()() const { return v; } }; int main() { float f = 0; AddFraction<float, 10000> a(f); std::cout << a() << std::endl; double d = 0; AddFraction<double, 10000> b(d); std::cout << b() << std::endl; } でどうだ.

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) {  float f = 0.0;  double d = 0.0;  int i;  for(i = 0;i < 400;i++) {   f += 0.01; d += 0.01;   f += 0.01; d += 0.01;   f += 0.01; d += 0.01;   f += 0.01; d += 0.01;   f += 0.01; d += 0.01;   f += 0.01; d += 0.01;   f += 0.01; d += 0.01;   f += 0.01; d += 0.01;   f += 0.01; d += 0.01;   f += 0.01; d += 0.01;   f += 0.01; d += 0.01;   f += 0.01; d += 0.01;   f += 0.01; d += 0.01;   f += 0.01; d += 0.01;   f += 0.01; d += 0.01;   f += 0.01; d += 0.01;   f += 0.01; d += 0.01;   f += 0.01; d += 0.01;   f += 0.01; d += 0.01;   f += 0.01; d += 0.01;   f += 0.01; d += 0.01;   f += 0.01; d += 0.01;   f += 0.01; d += 0.01;   f += 0.01; d += 0.01;   f += 0.01; d += 0.01;  }  printf("f = %f, d= %f\n", f, d);  return 0; }

  • BLK314
  • ベストアンサー率55% (84/152)
回答No.1

また、"勝ち組"の方ですか? しつこいですね~ 以前の批判が全然お分かりになっていないようです。 ”勝ち組"の方なので下々の意見なんて耳を貸すのも 馬鹿らしいということでしょうか?

関連するQ&A