This commit is contained in:
Biedermann Steve 2024-04-18 15:26:25 +02:00
commit 0630db6298
4 changed files with 81 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/target

16
Cargo.lock generated Normal file
View File

@ -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"

9
Cargo.toml Normal file
View File

@ -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"

55
src/main.rs Normal file
View File

@ -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}");
}