#include <bits/stdc++.h>
using namespace std;
long long int poww(long long int x, long long int y) {
  long long int res = 1;
  x %= 1000000007;
  for (; y; y >>= 1) {
    if (y & 1) res = res * x % 1000000007;
    x = x * x % 1000000007;
  }
  return res;
}
long long int k, d, t;
int check(long long int num) {
  double p = k / (1.0 * t);
  double q;
  if (d > k)
    q = abs(k - d) / (2.0 * t);
  else {
    double aa = k / (1.0 * d);
    long long int a = ceil(aa) * d - k;
    q = (a) / (2.0 * t);
  }
  if (p >= 1) return 0;
  if (num % 2 == 0) {
    long long int fac = num / 2;
    double x = fac * p;
    double y = fac * q;
    if (x + y < 1)
      return 1;
    else
      return 0;
  } else {
    long long int fac = num / 2;
    double x = (fac + 1) * p;
    double y = fac * q;
    if (x + y < 1)
      return 1;
    else
      return 0;
  }
}
int main() {
  cin >> k >> d >> t;
  long long int l = 0;
  long long int r = 2 * 1e18;
  while (r - l > 1) {
    long long int mid = (l + r) / 2;
    if (check(mid))
      l = mid;
    else
      r = mid - 1;
  }
  long long int ans;
  if (check(r))
    ans = r;
  else
    ans = l;
  long long int a;
  if (k > d) {
    double aa = k / (1.0 * d);
    a = ceil(aa) * d - k;
  } else
    a = abs(k - d);
  double anss;
  if (ans % 2 == 0) {
    long long int num = ans / 2;
    anss = num * k + num * (a);
    double x = num * (k / (1.0 * t));
    double y = num * (a / (2.0 * t));
    double off = (1 - (x + y)) * t;
    anss += off;
  } else {
    long long int num = ans / 2;
    anss = (num + 1) * k + num * (a);
    double x = (num + 1) * (k / (1.0 * t));
    double y = num * (a / (2.0 * t));
    double off = (1 - (x + y)) * 2 * t;
    anss += off;
  }
  printf("%0.10lf\n", anss);
  return 0;
}
