[過去ログ] プログラミングのお題スレ Part21 (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
658(5): デフォルトの名無しさん [sage] 2023/05/14(日) 01:48:51.69 ID:AS0t3f9C(1) AAS
お題:割り算を逆数の掛け算で近似する
単に逆数を掛けるだけだと簡単過ぎるので、例えば、
x/60 = x*(1/64 + (1/60 - 1/64)) = x*(1/64 + 1/960) = x*(1/64) + x*(1/960)
の様に、
a)2の整数べき乗と、
b)残り(除数の逆数-a)
に分割する事を考える(∵2の整数べき乗との乗算は誤差が発生しない)。
ゼロより大きい除数が与えられた時、これをa, bに分割せよ。
分割は、除算の計算精度が最も高いものにすること。
661: デフォルトの名無しさん [sage] 2023/05/14(日) 10:41:00.83 ID:+GvRlsVe(2/2) AAS
>>658
haskell
外部リンク:ideone.com
665: デフォルトの名無しさん [] 2023/05/14(日) 14:44:40.86 ID:/Abs1b1C(1/2) AAS
>>658
PowerShell 3以上
function bceil([UInt]$n)
{
if (!$n) {return 0}
$m, $n = [UInt]1, ($n - 1)
while ($n) {$m, $n = ($m -shl 1), ($n -shr 1)}
$m
}
function GCD([UInt]$a, [UInt]$b)
{
while ($b) {$a, $b = $b, ($a % $b)}
$a
}
2..20 + 40, 60 |% {
if (($a = bceil $_) -eq $_) {return "x/$_ = x*(1/$a)"}
$d= GCD $a $_
$b, $c = (($a - $_) / $d), ($a / $d * $_)
"x/$_ = x*(1/$a) + x*($b/$c)"
}
671(1): 658 [sage] 2023/05/15(月) 22:33:44.26 ID:02zVVK0g(1/2) AAS
>>660除数が2の整べき乗よりちょっと大きい場合は、引き算にした方が精度が出たりします。
外部リンク:sagecell.sagemath.org
672: 658 [sage] 2023/05/15(月) 22:37:15.73 ID:02zVVK0g(2/2) AAS
すぐ消えるかも知れない方のリンク(中身は同じ)
外部リンク:sagecell.sagemath.org
673(1): 658 [sage] 2023/05/16(火) 04:50:29.58 ID:XN8HUdK/(1) AAS
補足:>>671の「引き算」は、>>658での「b)残り(除数の逆数-a)」を負数にする事に
相当します。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.036s