[過去ログ] Qiita 4 - キータぞ、来たぞ、キータだぞー (984レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
315(12): 2024/03/03(日)21:47 ID:B4rwo5Er(1) AAS
閏年の仕様が変わったら判定関数だけ置き換えればいいのだから
判定関数の中身なんて何でもいいのよ
割り算(剰余算)と分岐はCPUにとって非常に遅いから避けるとするならば例えばこんな感じ
fn is_leap_year(year: u64) -> bool {
let q100 = (year * 42949673) >> 32;
((q100 & 3 == 0) | (q100 * 100 != year)) & (year & 3 == 0)
}
316(1): 2024/03/03(日)22:44 ID:korTDzLq(5/5) AAS
>>315
107374182500年は平年? 閏年?
318(1): 2024/03/04(月)00:48 ID:nt/dsevV(1) AAS
>>315
素直に100で割らない意味がわからん。
要らんことやって仕事増やすタイプだろお前。
pub fn is_leap_year(year: u64) -> bool {
let q100 = year / 100;
((q100 & 3 == 0) | (q100 * 100 != year)) & (year & 3 == 0)
}
省1
319: 2024/03/04(月)08:16 ID:L2qxv/xY(1) AAS
>>315
> 閏年の仕様が変わったら判定関数だけ置き換えればいいのだから
> 判定関数の中身なんて何でもいいのよ
仕様通りに動作するコーディングできるようなってからカッコイイこと言おうなw
321(1): 2024/03/04(月)09:02 ID:4WAZxDSM(1) AAS
>>315
Rustって使ったことないんだけど動確してみた。書き方合ってる?
fn is_leap_year(year: u64) -> bool {
let q100 = (year * 42949673) >> 32;
((q100 & 3 == 0) | (q100 * 100 != year)) & (year & 3 == 0)
}
fn main()
省7
326(2): 2024/03/04(月)10:17 ID:nwGjv9Ax(1) AAS
外部リンク:wandbox.org
> thread 'main' panicked at 'attempt to multiply with overflow', prog.rs:2:14
> note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
あっこれはカッコ悪いなw
>>315
> 割り算(剰余算)と分岐はCPUにとって非常に遅いから避けるとするならば例えばこんな感じ
素直に100で割ってればオーバーフローしないんだし優先順位間違ってるよ。
332: 2024/03/04(月)13:53 ID:GQyS78JX(1) AAS
Rust支持の人達って安全について意識が高く技術的レヴェルが高い層だと思っていたので自ら率先して不具合を作り込もうとする>>315の存在には驚いたんだけど、よく考えてみると
「えっ今どきEmacsなんて使ってるの?今はVSCode一択でしょ」
「えっ今どきSVNなんて使ってるの?今はgit一択でしょ」
「えっ今どきJavaなんて使ってるの?今はKotlin一択でしょ」
「えっ今どきC++なんて使ってるの?今はRust一択でしょ」
使ってる道具でマウント取ろうとする奴なんて昔からいるし使ってる道具が新しく洗練されてたとしてそれ使ってる奴の技術的高さを証明するものではないしなあ、変な先入観持ってたわと反省。
343: 2024/03/04(月)20:30 ID:k69OqpEV(1) AAS
>>322
>>315のコードでおかしな結果を出す一番近い年が107374182500年だと思ってる??
348: 2024/03/04(月)21:07 ID:lbPgOJLr(1) AAS
>>315のコードは
・なぜ引数yearの型がu64なのか
・yearを100で割れば良いところを2**32/100倍して32ビット右シフトなんて馬鹿なことをしてるのか
謎なのよなあ、こんなコード業務で書いたら絶対レビューでなんか言われるやつじゃん。
説明すれや >本人
361(2): 2024/03/05(火)11:10 ID:kMFA7wVm(1/2) AAS
>>355
> 関数内部の単なる数値演算に保守性もクソもないぜ
>>315のクソコード見てから言え
366(1): 2024/03/05(火)18:44 ID:1i72r55F(1) AAS
>>318
「let q100 = year / 100;」の方が生成コードが長く遅くなってるな
あくまでも速さ優先ということならば>>315の
「let q100 = (year * 42949673) >> 32;」が正解でいいんじゃないか
あとは状況による使い分けだろう
368: 2024/03/05(火)20:42 ID:HwnQ5/nd(1) AAS
> あくまでも速さ優先ということならば>>315の
> 「let q100 = (year * 42949673) >> 32;」が正解でいいんじゃないか
「自分は>>315じゃないけどこの人のコードが正解だと思いますよ」みたいな投稿よくできるなあ。
376(1): 2024/03/07(木)20:58 ID:HzTOrgQG(1) AAS
>>315と>>374を比べると微妙に違うんだな
q100 = (year * 42949673) >> 32
q100 = (year * 1374389535) >> 37
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.031s