deleted float operator overloads and added unary operator- to Time
diff --git a/aos/common/control_loop/ControlLoop.cc b/aos/common/control_loop/ControlLoop.cc
index f5253d4..ea62d85 100644
--- a/aos/common/control_loop/ControlLoop.cc
+++ b/aos/common/control_loop/ControlLoop.cc
@@ -4,8 +4,8 @@
 namespace control_loops {
 
 time::Time NextLoopTime(time::Time start) {
-  return (start / kLoopFrequency.ToNSec()) *
-      kLoopFrequency.ToNSec() +
+  return (start / static_cast<int32_t>(kLoopFrequency.ToNSec())) *
+      static_cast<int32_t>(kLoopFrequency.ToNSec()) +
       kLoopFrequency;
 }
 
diff --git a/aos/common/control_loop/Timing.cpp b/aos/common/control_loop/Timing.cpp
index 3a58036..8f42623 100644
--- a/aos/common/control_loop/Timing.cpp
+++ b/aos/common/control_loop/Timing.cpp
@@ -11,8 +11,8 @@
 void PhasedLoopXMS(int ms, int offset) {
   // TODO(brians): Tests!
   const Time frequency = Time::InMS(ms);
-  SleepUntil((Time::Now() / frequency.ToNSec()) *
-             frequency.ToNSec() +
+  SleepUntil((Time::Now() / static_cast<int32_t>(frequency.ToNSec())) *
+             static_cast<int32_t>(frequency.ToNSec()) +
              frequency + Time::InUS(offset));
 }
 
diff --git a/aos/common/time.cc b/aos/common/time.cc
index 28e5cae..ced0c4d 100644
--- a/aos/common/time.cc
+++ b/aos/common/time.cc
@@ -149,6 +149,10 @@
   return Time(*this) %= rhs;
 }
 
+const Time Time::operator-() const {
+  return Time(-sec_ - 1, kNSecInSec - nsec_);
+}
+
 bool Time::operator==(const Time &rhs) const {
   return sec_ == rhs.sec_ && nsec_ == rhs.nsec_;
 }
diff --git a/aos/common/time.h b/aos/common/time.h
index a35065d..bc2dc3e 100644
--- a/aos/common/time.h
+++ b/aos/common/time.h
@@ -165,6 +165,12 @@
   Time &operator*=(int32_t rhs);
   Time &operator/=(int32_t rhs);
   Time &operator%=(int32_t rhs);
+  Time &operator%=(double rhs) = delete;
+  Time &operator*=(double rhs) = delete;
+  Time &operator/=(double rhs) = delete;
+  const Time operator*(double rhs) const = delete;
+  const Time operator/(double rhs) const = delete;
+  const Time operator%(double rhs) const = delete;
   #endif
   const Time operator+(const Time &rhs) const;
   const Time operator-(const Time &rhs) const;
@@ -173,6 +179,8 @@
   double operator/(const Time &rhs) const;
   const Time operator%(int32_t rhs) const;
 
+  const Time operator-() const;
+
   bool operator==(const Time &rhs) const;
   bool operator!=(const Time &rhs) const;
   bool operator<(const Time &rhs) const;
diff --git a/aos/common/time_test.cc b/aos/common/time_test.cc
index 3f53de3..ebc8284 100644
--- a/aos/common/time_test.cc
+++ b/aos/common/time_test.cc
@@ -98,6 +98,12 @@
   EXPECT_DOUBLE_EQ(-5.25, Time(36, Time::kNSecInSec / 4 * 3) / Time(-7, 0));
 }
 
+TEST(TimeTest, Negation) {
+  EXPECT_EQ(Time(-5, 1234), -Time(4, Time::kNSecInSec - 1234));
+  EXPECT_EQ(Time(5, Time::kNSecInSec * 2 / 3 + 1),
+            -Time(-6, Time::kNSecInSec / 3));
+}
+
 TEST(TimeTest, Comparisons) {
   EXPECT_TRUE(Time(971, 254) > Time(971, 253));
   EXPECT_TRUE(Time(971, 254) >= Time(971, 253));