<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def jd_to_struct_time(jd):
 """ Return a `struct_time` converted from a Julian Date float number. WARNING: Conversion to then from Julian Date value to `struct_time` can be inaccurate and lose or gain time, especially for BC (negative) years. NOTE: extra fields `tm_wday`, `tm_yday`, and `tm_isdst` are set to default values, not real ones. """

    year, month, day = jdutil.jd_to_date(jd)

    # Convert time of day from fraction of day
    day_fraction = day - int(day)
    hour, minute, second, ms = jdutil.days_to_hmsm(day_fraction)
    day = int(day)

    # This conversion can return negative values for items we do not want to be
    # negative: month, day, hour, minute, second.
    year, month, day, hour, minute, second = _roll_negative_time_fields(
        year, month, day, hour, minute, second)

    return struct_time(
        [year, month, day, hour, minute, second] + TIME_EMPTY_EXTRAS
    )