[過去ログ] Qiita 4 - キータぞ、来たぞ、キータだぞー (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
315
(12): デフォルトの名無しさん [sage] 2024/03/03(日) 21:47:18.39 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): デフォルトの名無しさん [sage] 2024/03/03(日) 22:44:59.76 ID:korTDzLq(5/5) AAS
>>315
107374182500年は平年? 閏年?
318
(1): デフォルトの名無しさん [sage] 2024/03/04(月) 00:48:03.64 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)
}
外部リンク:godbolt.org
319: デフォルトの名無しさん [sage] 2024/03/04(月) 08:16:08.85 ID:L2qxv/xY(1) AAS
>>315
> 閏年の仕様が変わったら判定関数だけ置き換えればいいのだから
> 判定関数の中身なんて何でもいいのよ

仕様通りに動作するコーディングできるようなってからカッコイイこと言おうなw
321
(1): デフォルトの名無しさん [sage] 2024/03/04(月) 09:02:08.19 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()
{
 let year = 107374182500;
 println!("is_leap_year({}) -> {}", year, is_leap_year(year));
}

実行結果:
is_leap_year(107374182500) -> true

外部リンク:wandbox.org
326
(2): デフォルトの名無しさん [sage] 2024/03/04(月) 10:17:08.86 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: デフォルトの名無しさん [sage] 2024/03/04(月) 13:53:50.23 ID:GQyS78JX(1) AAS
Rust支持の人達って安全について意識が高く技術的レヴェルが高い層だと思っていたので自ら率先して不具合を作り込もうとする>>315の存在には驚いたんだけど、よく考えてみると

「えっ今どきEmacsなんて使ってるの?今はVSCode一択でしょ」
「えっ今どきSVNなんて使ってるの?今はgit一択でしょ」
「えっ今どきJavaなんて使ってるの?今はKotlin一択でしょ」
「えっ今どきC++なんて使ってるの?今はRust一択でしょ」

使ってる道具でマウント取ろうとする奴なんて昔からいるし使ってる道具が新しく洗練されてたとしてそれ使ってる奴の技術的高さを証明するものではないしなあ、変な先入観持ってたわと反省。
343: デフォルトの名無しさん [sage] 2024/03/04(月) 20:30:16.70 ID:k69OqpEV(1) AAS
>>322
322(1): デフォルトの名無しさん [sage] 2024/03/04(月) 09:41:48.67 ID:ybOgKOgD(1) AAS
>>316 >>321
1000億年後の閏年とか低能丸出し
地球も存在しないぞ
それ以前に60万年後には誤差が半年となり夏冬逆転し無意味となる
それ以前にルールが変わるため大きな数に対応する意味がない
>>315のコードでおかしな結果を出す一番近い年が107374182500年だと思ってる??
348: デフォルトの名無しさん [sage] 2024/03/04(月) 21:07:19.90 ID:lbPgOJLr(1) AAS
>>315のコードは
・なぜ引数yearの型がu64なのか
・yearを100で割れば良いところを2**32/100倍して32ビット右シフトなんて馬鹿なことをしてるのか

謎なのよなあ、こんなコード業務で書いたら絶対レビューでなんか言われるやつじゃん。

説明すれや >本人
361
(2): デフォルトの名無しさん [sage] 2024/03/05(火) 11:10:48.88 ID:kMFA7wVm(1/2) AAS
>>355
355(1): デフォルトの名無しさん [sage] 2024/03/05(火) 00:40:04.95 ID:ayHwglDl(1) AAS
関数内部の単なる数値演算に保守性もクソもないぜ
そんなところの保守性にこだわるやつは仕事できないやつ
それよりも複数のデータや複数の関数に関わるところの保守性をしっかりやればいい
> 関数内部の単なる数値演算に保守性もクソもないぜ

>>315のクソコード見てから言え
366
(1): デフォルトの名無しさん [sage] 2024/03/05(火) 18:44:35.96 ID:1i72r55F(1) AAS
>>318
「let q100 = year / 100;」の方が生成コードが長く遅くなってるな
あくまでも速さ優先ということならば>>315
「let q100 = (year * 42949673) >> 32;」が正解でいいんじゃないか
あとは状況による使い分けだろう
368: デフォルトの名無しさん [sage] 2024/03/05(火) 20:42:06.70 ID:HwnQ5/nd(1) AAS
> あくまでも速さ優先ということならば>>315
> 「let q100 = (year * 42949673) >> 32;」が正解でいいんじゃないか

「自分は>>315じゃないけどこの人のコードが正解だと思いますよ」みたいな投稿よくできるなあ。
376
(1): デフォルトの名無しさん [sage] 2024/03/07(木) 20:58:11.23 ID:HzTOrgQG(1) AAS
>>315>>374
374(1): デフォルトの名無しさん [sage] 2024/03/06(水) 23:45:18.98 ID:gwIxTDvC(1) AAS
>>367
なるほど
コンパイラが
let q100 = year / 100;

let q100 = ((year as u64 * 1374389535) >> 37) as u32;
へと自動変換してくれてるんだ
これは割り算が遅いため?
を比べると微妙に違うんだな
q100 = (year * 42949673) >> 32
q100 = (year * 1374389535) >> 37
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 1.613s*