えびちゃんの日記

えびちゃん(競プロ)の日記です。

2025-03-01から1ヶ月間の記事一覧

イテレータとしての箱ティッシュとハンドソープ

箱ティッシュとハンドソープは、それぞれ「次の要素を取得する」という操作ができます。つまりイテレータですね。 しかし、一言でイテレータと言っても両者は少し性質が違います。 箱ティッシュは、要素の取得と同時に(ユーザから観測できる形で)次の要素…

correct rounding への道 (2) shift-and-add algorithm

前回 は、主に自分で考えた素朴なアルゴリズムを実装・証明しましょうというスタンスの回でした。 今回は(今後は?)既存の実装をなぞる形で勉強していきます。 紹介 実装 資料 ツール おわび 本題 考察 手順 おまけ 所感 おわり 紹介 実装 LLVM のものを参…

画像のてすと

ここにテスト用の画像を貼る ここにテスト用の画像を貼ります。

correct rounding への道 (1) 素朴な sqrt

いろいろな数学関数たちの correct rounding な実装をしていこうという遊びです。 丸め方向については一旦は tiesToEven のみを考えています。 $\sin$ や $\log$ のような超越関数 (transcendental functions) は大変ではありますが、さまざまな典型テクがあ…

浮動小数点型に関するポエム 20250320

えびちゃんです。お気持ち表明記事です。最近「お気持ち表明」というフレーズをあまり聞かなくなった気がしますね。 出会い 整数型との対比 固定小数点型や十進浮動小数点型など 誤差 比較 数式での証明 数学関数たちについて 実務? 所感 おわり 各章はそれ…

u64 の平方数判定を f64 の sqrt でやるやつの正当性

Rust で言うところの下記のような関数です。 fn is_square(nn: u64) -> bool { let n = (nn as f64).sqrt() as u64; n.wrapping_mul(n) == nn } fn is_square(nn: u64) -> bool { ((nn as f64).sqrt() as u64).wrapping_pow(2) == nn } これが問題ないという…

cbrt を求めよう (with glibc)

「そろそろ四則演算の誤差評価も飽きたな〜」「数学関数の計算とかもやってみてよ」という声が聞こえてきた*1ので、今日はそれをします。 導入 glibc 実装 精度? まえおき 方針 定数の計算 近似多項式 念のためもう少し近づけておく 完成 余談 参考文献 感…

浮動小数点型の仮数部の桁数を知りたいとき

C++ で #include <limits> をして std::numeric_limits<__float128>::digits をすると 0 と返ってきました。 よって、__float128 は float にすら劣る桁数しかないことがわかりました。いかがでしたか? コード #include <math.h> #include <stdio.h> #define MAGIC 0x7EEE #define PRECISION(F) l</stdio.h></math.h></__float128></limits>…