[過去ログ] プログラミングのお題スレ 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
660(1): デフォルトの名無しさん [sage] 2023/05/14(日) 10:23:02.41 ID:+GvRlsVe(1/2) AAS
要するに2進展開の小数部の最初のゼロでない桁決定するの?
除数が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