2023-01-01から1年間の記事一覧

Lerp 手法 5 選

はじめに Lerp というのは 線形補間 を行う関数で、直近の 2 点間を直線で結んだとき、位置 (の比率) t にある点の値を返します。 C# では System.Numerics.Vector3.Lerp や .NET 8 から実装される Double.Lerp があります。 これらよりは Unity の Mathf.Le…

Unity で C ネイティブプラグインから __m128(i/d) 値を送受信する方法

はじめに C プラグイン側にこういう関数があって、これを Unity (C#) 側から呼びたいとします。 __declspec(dllexport) __m128d nextDouble2(rng_t *rng, __m128d min, __m128d max) { // do something... } なお、 __m128d は double 型を 2 つつなげた SIM…

詳説 Ziggurat 法 ~ 正規分布・指数分布乱数の高速生成

はじめに 正規分布 や 指数分布 に従う擬似乱数を生成する際、 Ziggurat 法 を用いると高速に生成することができます。 本稿では、この Ziggurat 法の仕組みや実装について、できる限り詳しく解説していきたいと思います。 はじめに Ziggurat 法以外の手法に…

続・ UnityEngine.Random の実装と性質 ~ rotation(Uniform) の謎

はじめに 前回の記事 から調査が進んだので、 UnityEngine.Random の実装と性質についての追加情報をまとめました。 調査環境は Unity 2022.2.0b14 (Windows) です。 なお、調査は入出力の観測にて行っているため、実際の計算式や手順と異なる場合があります…

JDK 17 における擬似乱数生成と LXM ファミリについて

はじめに 2021/09/14 に GA となった JDK 17 では、 擬似乱数生成まわりの強化 が行われました。 更新点を見ると、 LXM という新しい擬似乱数生成器が実装されているようです。 しかし、このアルゴリズムについて聞いたことがなかったため (実装当時) 、調べ…

JDK にバグ報告してみたおはなしと、 Java における LXM の不思議な実装について

はじめに どの擬似乱数生成器が速いのかを BenchmarkDotNet で調べるために、いろいろな擬似乱数生成器を C# に移植して遊んでいたのが発端です。 Java では、JDK 17 から LXM ファミリという擬似乱数生成器が追加されています。 簡単に説明すると、線形合同…