///|
pub fn kilometers_to_meters(value : Double) -> Double {
  value * 1000.0
}

///|
pub fn meters_to_kilometers(value : Double) -> Double {
  value / 1000.0
}

///|
pub fn kilometers_to_au(value : Double) -> Double {
  value / SunEarthDistanceKm
}

///|
pub fn au_to_kilometers(value : Double) -> Double {
  value * SunEarthDistanceKm
}

///|
pub fn seconds_to_minutes(value : Double) -> Double {
  value / 60.0
}

///|
pub fn minutes_to_seconds(value : Double) -> Double {
  value * 60.0
}

///|
pub fn seconds_to_hours(value : Double) -> Double {
  value / 3600.0
}

///|
pub fn hours_to_seconds(value : Double) -> Double {
  value * 3600.0
}

///|
pub fn days_to_seconds(value : Double) -> Double {
  value * 86400.0
}

///|
pub fn seconds_to_days(value : Double) -> Double {
  value / 86400.0
}

///|
pub fn kilometers_per_second_to_meters_per_second(value : Double) -> Double {
  value * 1000.0
}

///|
pub fn meters_per_second_to_kilometers_per_second(value : Double) -> Double {
  value / 1000.0
}

///|
pub fn degrees_to_radians(value : Double) -> Double {
  radians(value)
}

///|
pub fn radians_to_degrees(value : Double) -> Double {
  degrees(value)
}

///|
pub fn revolutions_per_day_to_rad_per_second(value : Double) -> Double {
  mean_motion_rev_day_to_rad_s(value)
}

///|
pub fn rad_per_second_to_revolutions_per_day(value : Double) -> Double {
  value * 86400.0 / two_pi
}

///|
pub fn newtons_to_kilograms_force(value : Double) -> Double {
  value / 9.80665
}

///|
pub fn kilograms_force_to_newtons(value : Double) -> Double {
  value * 9.80665
}

///|
pub fn pascal_to_bar(value : Double) -> Double {
  value / 100000.0
}

///|
pub fn bar_to_pascal(value : Double) -> Double {
  value * 100000.0
}

///|
pub fn watts_to_dbw(value : Double) -> Double {
  if value <= 0.0 {
    -1.0e9
  } else {
    10.0 * @math.log10(value)
  }
}

///|
pub fn dbw_to_watts(value : Double) -> Double {
  @math.pow(10.0, value / 10.0)
}

///|
pub fn db_to_linear(value : Double) -> Double {
  @math.pow(10.0, value / 10.0)
}

///|
pub fn linear_to_db(value : Double) -> Double {
  if value <= 0.0 {
    -1.0e9
  } else {
    10.0 * @math.log10(value)
  }
}

///|
pub fn normalize_angle_degrees(value : Double) -> Double {
  wrap_positive(value, 360.0)
}

///|
pub fn signed_angle_degrees(value : Double) -> Double {
  let wrapped = normalize_angle_degrees(value)
  if wrapped > 180.0 {
    wrapped - 360.0
  } else {
    wrapped
  }
}

///|
pub fn normalize_time_of_day_seconds(value : Double) -> Double {
  wrap_positive(value, 86400.0)
}

///|
pub fn format_duration_seconds(value : Double) -> String {
  "\{seconds_to_hours(value).floor()}h \{(seconds_to_minutes(value) % 60.0).floor()}m \{(value % 60.0).floor()}s"
}