From 0630db62980ca20d43195e2861e6862a77ee3ddb Mon Sep 17 00:00:00 2001 From: Biedermann Steve Date: Thu, 18 Apr 2024 15:26:25 +0200 Subject: [PATCH] init --- .gitignore | 1 + Cargo.lock | 16 ++++++++++++++++ Cargo.toml | 9 +++++++++ src/main.rs | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 81 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 src/main.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..715a067 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,16 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "asdf" +version = "0.1.0" +dependencies = [ + "split_one", +] + +[[package]] +name = "split_one" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2198b215a5ce931043797f707249b3142fe544aca13cfbdf92bdaecccd7f214c" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..b133c5b --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "asdf" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +split_one = "1.0.2" diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..2a1c6eb --- /dev/null +++ b/src/main.rs @@ -0,0 +1,55 @@ +use std::time::{SystemTime, UNIX_EPOCH}; + +const NANOS_PER_SEC: u32 = 1_000_000_000; +fn manual_duration_as_secs_f32(secs: u64, nanos: u128) -> f32 { + let secs_as_f32 = secs as f32; + println!("secs_as_f32: {secs_as_f32:.10}"); + let nanos_as_f32 = nanos as f32; + println!("nanos_as_f32: {nanos_as_f32:.10}"); + let nanos_per_sec_as_f32 = NANOS_PER_SEC as f32; + println!("nanos_per_sec_as_f32: {nanos_per_sec_as_f32:.10}"); + let nanos_in_seconds = nanos_as_f32 / nanos_per_sec_as_f32; + println!("nanos_in_seconds: {nanos_in_seconds:.10}"); + let result = secs_as_f32 + nanos_in_seconds; + println!("result: {result:.10}"); + result +} + +fn manual_duration_as_secs_f32_late_cast(secs: u64, nanos: u128) -> f32 { + let nanos_in_seconds = nanos / (NANOS_PER_SEC as u128); + println!("nanos_in_seconds: {nanos_in_seconds:.10}"); + let result = (secs as u128) + nanos_in_seconds; + println!("result: {result:.10}"); + result as f32 +} + +fn main() { + let original = 1713441059 as u128; + let original_as_f32 = 1713441059 as f32; + println!("original: {original}"); + println!("original_as_f32: {original_as_f32}"); + println!("original_as_f32 < f32::MAX: {}", original_as_f32 < f32::MAX); + println!( + "original_as_f32 as u128 == original: {}", + original_as_f32 as u128 == original + ); + + let now = SystemTime::now(); + println!("SystemTime::now(): {now:?}"); + let now = now.duration_since(UNIX_EPOCH).unwrap(); + println!("now.duration_since(): {now:?}"); + let secs = now.as_secs(); + let nanos = now.as_nanos() - ((secs * (NANOS_PER_SEC as u64)) as u128); + println!("now.duration_since() internal: Secs: {secs}, Nanos: {nanos}"); + let now_f32 = now.as_secs_f32(); + println!("as secs f32: {now_f32:.0}"); + let now_f64 = now.as_secs_f64(); + println!("as secs f64: {now_f64:.0}"); + println!("secs: {secs:.10}"); + println!("nanos: {nanos:.10}"); + println!("NANOS_PER_SEC: {NANOS_PER_SEC:.10}"); + let manual_f32 = manual_duration_as_secs_f32(secs, nanos); + println!("manual as secs f32: {manual_f32:.0}"); + let manual_f32_late_cast = manual_duration_as_secs_f32_late_cast(secs, nanos); + println!("manual as secs f32 (late cast): {manual_f32_late_cast:.0}"); +}