Достижение точного времени выполнения в Фортране

Вы можете создать метод filterCar через наследование прототипа

Array.prototype.filterCar = function(feature, range) {
   return this.filter((el) => {
     // is the range defined?
     if (!!range.length) {
        return el[feature] >= range[0] && el[feature] <= range[1];
     }
     else {
        return true;
     }
   })
};


var cars = [
  {name:'Ferrari', speed:240, price: 100},
  {name:'Porsche', speed:220, price: 90},
  {name:'Bugatti', speed:300, price: 500}
 ];

var result1 = cars.filterCar('speed', [240, 300])
                  .filterCar('price', [80, 120]));

var result2 = cars.filterCar('speed', [ ])
                  .filterCar('price', [80, 120]));



console.log(result1); // [{name: "Ferrari", speed: 240, price: 100}]

console.log(result2); /* [{name: "Ferrari", speed: 240, price: 100}, 
                         {name: "Porsche", speed: 220, price: 90}] */
1
задан Vladimir F 21 January 2019 в 22:54
поделиться

2 ответа

Размещенный код использует целое число для получения тактовой частоты системы. system_clock также может быть вызвано с использованием реальной переменной для возврата ставки. Мое подозрение, подтвержденное в настоящее время обменом комментариями, заключалось в том, что целое число было неточным представлением тактовой частоты, тем самым учитывая неточность, наблюдаемую при использовании system_clock.

OP сообщает об исправлении проблемы, используя реальную переменную для тактовой частоты.

0
ответ дан High Performance Mark 21 January 2019 в 22:54
поделиться

Я зависит от того, насколько точно вы хотите, чтобы измеренное время было. Следующий модуль позволит вам рассчитать время с точностью до миллисекунд.

module time_keeper

  implicit none
  integer    :: start(8), now(8)

contains

  subroutine startclock( )
    implicit none
    call date_and_time(values=start)
  end subroutine startclock


  subroutine elapsedtime_s( et_s )
    implicit none
    integer             :: diffs(8)=0
    real   , intent(out):: et_s       ! in seconds

    call date_and_time(values=now)

    ! - Find the difference in times
    diffs = now - start

    ! - This works only when the time is measured in a specific month
    if (diffs(3) > 0) then
       diffs(5) = 24*diffs(3) + diffs(5)
    endif

    et_s = diffs(5) * 3600 + diffs(6) * 60 + diffs(7) + 1e-3 * diffs(8)

  end subroutine elapsedtime_s

end module time_keeper

program main

  use time_keeper

  implicit none

  integer     :: x=0, i
  real        :: et_s

  call startclock()
  do i = 1, 1e5
     x = x + 1
  end do

  call elapsedtime_s( et_s )
  write(*,*) et_s

end program main

Обратите внимание, что time_keeper::elapsedtime_s работает, только если время измеряется в течение месяца. Если вы хотите, чтобы измерения также учитывались в месяцах, вы можете расширить подпрограмму. Это должно быть просто.

Другие варианты включают временную библиотеку , system_clock (см. здесь ). Ссылка для date_and_time здесь здесь

0
ответ дан newkid 21 January 2019 в 22:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: