テスト/クイックのint64チューザーは、[-2⁶²、2⁶²)の範囲の値を返すように記述されています。
それは間違いです。 #19808である修正。
ただし、コードは記述どおりに実行する必要がありますが、 @ dr2chaseのNexus9でも実行できます。
android / arm64ツールチェーンから構築されたlinux / arm64ツールチェーンを実行する
他の場所からクロスコンパイルされ、経験的に外部の値を生成します
その範囲。 (それは#19807を見つけるのに役立ちました。)
linux / arm64ツールチェーンから構築されたlinux / arm64ツールチェーンを使用する
Odroidの他の場所からクロスコンパイルされたものは正しく機能します。
テスト/クイックを修正して全範囲を生成する前に、把握する必要があります
現在のコードがより狭い範囲外の値を生成する理由を説明します
この構成では。
math / rand's(* Rand).Int63によると:
return r.src.Int63()
および(* rngSource).Int63によると:
return int64(rng.Uint64() & _MASK)
どこ:
const (
_MAX = 1 << 63
_MASK = _MAX - 1
)
次に、testing / quickのrandInt64関数は次のことを行います。
return rand.Int63() - 1<<62
したがって、 & _MASK
または- 1<<62
のいずれかがその役割を果たしていません。
Nexus 9ARM64ハードウェアにバグがある可能性があります。
android / arm64ツールチェーンが
Nexus 9のブートストラップにバグがあり、ネイティブにコンパイルされている
linux / arm64ツールチェーンにバグがあり、テスト/クイックが発生する
予期しない値を生成するコード。 わかりません。
CLhttps : //golang.org/cl/39152はこの問題について言及しています。
次のCプログラムは、問題のあるシステムで誤動作します。
#include <stdio.h>
typedef unsigned long long uvlong;
uvlong f() { return ~0ull; }
uvlong g() { return (f() << 1) >> 1; }
int main() {
for (int i = 0;; i++) {
if ((long long)g() < 0) {
printf("%d\n", i);
}
}
return 0;
}
20k〜50kの反復後、ループはすべての反復でiの出力を開始します。
囲碁のせいではありません。 これについては他の場所で報告します。
CLhttps : //golang.org/cl/39310はこの問題について言及しています。
最も参考になるコメント
次のCプログラムは、問題のあるシステムで誤動作します。
20k〜50kの反復後、ループはすべての反復でiの出力を開始します。
囲碁のせいではありません。 これについては他の場所で報告します。