dポイントプレゼントキャンペーン実施中!

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

 宜しくお願いします。

A 回答 (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;
}
    • good
    • 0

一応 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);
みたいに書けてきれいかも.
ついでにいうと「ここ」が「ネタスレ」なるものである, ということではないです. ただ, このように「どこをどう見ても自分で努力しているような気配がない」質問に対しては, 無視されたり「読みにくいプログラムコンテスト」の題材にされたりすることがあります.
    • good
    • 0

#3はC++?



合ってるのかどうかまったくわからん。

ここ実はネタスレ?
    • good
    • 0

#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;
}
でどうだ.
    • good
    • 1

#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;
}
    • good
    • 0

また、"勝ち組"の方ですか?


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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!