日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

rust(46)-随机数(3)

發布時間:2025/3/12 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rust(46)-随机数(3) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

rand_jitter
基于定時抖動的非物理真隨機數發生器。
這是一個真正的隨機數生成器,而不是偽隨機數生成器。由JitterRng生成的隨機數可以看作是新的熵。其結果是,它比OsRng和PRNGs慢了一個數量級(大約103個數量級)。106慢)。
很少有情況下使用RNG是合適的。只有很少的應用需要真正的熵。正常的PRNG可能在統計上難以區分,而加密的PRNG也應該同樣無法預測。
JitterRng可以在沒有標準庫的情況下使用,但是不方便,您必須提供一個高精度的計時器,并且必須嚴格遵循JitterRng::new_with_timer的說明。

cargo add rand_jitter

pub fn set_rounds(&mut self, rounds: u8)

配置用于生成每個64位值的輪數。這必須大于零,并且對性能和輸出質量有很大的影響。
new_with_timer保守地使用64輪,但通常可以使用更少的輪。test_timer()函數返回全強度(平臺相關)所需的最小輪數,因此可以使用rng.set_rounds(rng.test_timer()?);或緩存該值。
pub fn test_timer(&mut self) -> Result<u8, TimerError>
基本的定時器質量測試,通過測量CPU定時抖動幾百次。
如果成功,這將返回收集64位熵所需的估計回合數。否則將返回一個帶有失敗原因的TimerError。

?]

pub enum Result<T, E> {Ok(T),Err(E), } Ok(T)Contains the success valueErr(E)Contains the error value Result is a type that represents either success (Ok) or failure (Err). See the std::result module documentation for details.Compiling learn47 v0.1.0 (F:\learn\rustlearn\learn47)Finished dev [unoptimized + debuginfo] target(s) in 0.76sRunning `F:\learn\rustlearn\learn47\target\debug\learn47.exe` 5410982393200311058 11079485389792716384 14298778480130199918------------------ (program exited with code: 0)請按任意鍵繼續. . . extern crate rand_jitter; use rand_jitter::JitterRng; use crate::rand_jitter::rand_core::RngCore;fn get_nstime() -> u64 {use std::time::{SystemTime, UNIX_EPOCH};let dur = SystemTime::now().duration_since(UNIX_EPOCH).unwrap();// The correct way to calculate the current time is// `dur.as_secs() * 1_000_000_000 + dur.subsec_nanos() as u64`// But this is faster, and the difference in terms of entropy is// negligible (log2(10^9) == 29.9).dur.as_secs() << 30 | dur.subsec_nanos() as u64 }fn main() {let mut rng = JitterRng::new_with_timer(get_nstime);let _ = rng.next_u64();// Ready for uselet v1: u64 = rng.next_u64();println!("{:?}", v1);let v2: u64 = rng.next_u64();println!("{:?}", v2);let v3: u64 = rng.next_u64();println!("{:?}", v3); }

總結

以上是生活随笔為你收集整理的rust(46)-随机数(3)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。