javascriptやphp だと 1000分の1秒で設定できます。
これ以上の速度で処理できるプログラム言語ってありますか?
教えてください。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
例えばCの標準ライブラリー(というよりUnix系OSの機能といった方がよいのかも知れませんが・・・)にはマイクロ秒(10の-6乗秒)単位でsleepする関数usleepがあります。(最初のコードは結果が分かりにくかったので1回当たりの経過時間を表示するように直しました)
C
1#include <stdio.h> 2#include <unistd.h> 3#include <stdlib.h> 4#include <time.h> 5 6#define N 1000 7 8int main(int argc, const char* argv[]) { 9 int interval = atoi(argv[1]); 10 clock_t t0 = clock(); 11 for (int i = 0; i < N; i++) { 12 usleep(interval); 13 } 14 clock_t t1 = clock(); 15 printf("%f micro second\n", (double)(t1-t0) * 1E6 / CLOCKS_PER_SEC / N); 16 return 0; 17}
こんなものを作って実際にWindows 10 VirtualBox上のUbuntu 16.04LTS, gcc 5.4.0でやってみると...
$ ./a.out 1 9.435000 micro second $ ./a.out 10 9.090000 micro second $ ./a.out 20 9.980000 micro second
チャチなパソコンでやっているせいか、OSの制約のせいかわかりませんが、10マイクロ秒以下のインターバルの精度で処理することは実際には難しそうです。
蛇足:ライブラリーの仕様としてはJavaの標準ライブラリーにはナノ秒(10の-9乗秒)まで指定してsleepするメソッドが存在します。それを使って上記と同じUbuntu上のopenjdk 1.8.0_131でやってみますと・・・
java
1public class IntervalTest { 2 static final int N = 1000; 3 4 public static void main(String[] args) throws InterruptedException { 5 long interval = Long.parseLong(args[0]); 6 long ms = interval / 1_000_000; 7 int ns = (int)(interval % 1_000_000); 8 long t0 = System.nanoTime(); 9 for (int i = 0; i < N; i++) { 10 Thread.sleep(ms, ns); 11 } 12 long t1 = System.nanoTime(); 13 System.out.format("%,f nano secound%n", (double)(t1 - t0) / N); 14 } 15} 16 17結果==> 18$ java IntervalTest 1 191,303,507.728000 nano secound 20$ java IntervalTest 1000000 211,291,129.922000 nano secound 22$ java IntervalTest 2000000 232,313,371.724000 nano secound
どうやら自分が使っているバージョンのopenjdkのjvmは1ミリ秒程度での精度しかサポートされていないようです。
時間精度は言語やライブラリーの仕様だけでなく、プラットフォームに依存するようですね。
投稿2017/06/24 08:27
編集2017/06/25 00:26総合スコア18394
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。