並び順

ブックマーク数

期間指定

  • から
  • まで

1 - 31 件 / 31件

新着順 人気順

浮動小数点数の検索結果1 - 31 件 / 31件

タグ検索の該当結果が少ないため、タイトル検索結果を表示しています。

浮動小数点数に関するエントリは31件あります。 programming、 プログラミング、 数学 などが関連タグです。 人気エントリには 『0.1は浮動小数点数で正確に表せないのに、printしたときに0.1と表示されるのはなぜか - Qiita』などがあります。
  • 0.1は浮動小数点数で正確に表せないのに、printしたときに0.1と表示されるのはなぜか - Qiita

    当たり前のことに感じますが、0.1は浮動小数点数(IEEE 754)では正確に表現できません。 なのにprintをしたときに0.1と表示されるのは不思議です。 このことについて分かったことを書いておきます。 環境 この記事ではPython 3.7を使用しています。 【前提】浮動小数点数 この記事で、以降"浮動小数点数"という場合は、"IEEE 754 倍精度"のことを指します。 浮動小数点数のフォーマットは、数を以下の形式に変換し、sign、exp、fracを順に並べたものです。

      0.1は浮動小数点数で正確に表せないのに、printしたときに0.1と表示されるのはなぜか - Qiita
    • 浮動小数点数オタクが AtCoder Beginner Contest 169 のC問題をガチで解説してみる - Qiita

      どうも、浮動小数点数オタクのmod_poppoです。 昨日開催された ABC169 の C 問題が浮動小数点数の罠な問題だったらしいので、どこが罠なのか、そしてどうすれば罠を回避できるのかを解説してみます。 また、典型的な誤答に対しては、それを落とすためのテストケースも用意しました。 問題文(引用) まず最初に問題文を引用しておきます。 AtCoder Beginner Contest 169 | C - Multiplication 3 問題文 $A\times B$ の小数点以下を切り捨て、結果を整数として出力してください。 制約 $0\le A\le 10^{15}$ $0\le B<10$ $A$ は整数 $B$ は小数第 2 位まで与えられる 入力 入力は以下の形式で標準入力から与えられる。

        浮動小数点数オタクが AtCoder Beginner Contest 169 のC問題をガチで解説してみる - Qiita
      • ArmにあるというJavaScript専用命令とは何か、あるいは浮動小数点数を整数に変換する方法について - Qiita

        // gcc-10 -march=armv8.3-a arm-jcvt.c という風にコンパイル #include <stdio.h> #include <math.h> #include <inttypes.h> #include <arm_acle.h> // Prototype: // int32_t __jcvt(double); #if defined(__GNUC__) __attribute__((noinline)) #endif int32_t cast_double_to_i32(double x) { return (int32_t)x; } int main(void) { printf("(int32_t)(-2.8) = %" PRId32 "\n", cast_double_to_i32(-2.8)); printf("(int32_t)1.99 = %" P

          ArmにあるというJavaScript専用命令とは何か、あるいは浮動小数点数を整数に変換する方法について - Qiita
        • "「0.1+0.2≠0.3」だから浮動小数点数を扱うときには気を付けましょう" はいいんだけど結局どうしたらいいのかまでフォローしたほうが親切だと思ったので調べてみた - Qiita

          "「0.1+0.2≠0.3」だから浮動小数点数を扱うときには気を付けましょう" はいいんだけど結局どうしたらいいのかまでフォローしたほうが親切だと思ったので調べてみたPythonプログラミング初心者数学浮動小数点数 釣られた https://qiita.com/higashi_nc/items/9a5ea00415a008f06843 に釣られて読みました。 2行でまとめると以下のような内容です。 10進数の0.1や0.2は浮動小数点数で表すとピッタリ0.1や0.2にはならずに誤差が出る 浮動小数点数の扱いを理解して、より堅牢なプログラムを作成することを願っています。 え?結局どうしたらいいの?という感想だけ残ったので各言語での浮動小数点数同士の比較の方法を ChatGPT に教えてもらいました。 結局どうしたらいいのか 基本的に浮動小数点数同士の差がある程度の誤差より小さければ同じ数であ

            "「0.1+0.2≠0.3」だから浮動小数点数を扱うときには気を付けましょう" はいいんだけど結局どうしたらいいのかまでフォローしたほうが親切だと思ったので調べてみた - Qiita
          • 文字列から浮動小数点数に変換する、なるべく速く - toge's diary

            TL;DR 文字列から浮動小数点数に変換するならfastfloat使いましょう。 私が試せる環境で比較する限り、とても速いです。 細かいことが気になります C++でちょっとしたプログラムを書くときにいつも気になるのが 「文字列データから指定データ型への変換処理をどうやって効率的に書くか」 です。私だけかもしれませんが。 特に悩んでしまうのが「文字列→浮動小数点」です。 std::scanf, std::stringstreamを使うものは大抵すごく遅い std::strtodstd::stodはstd::stringへの変換が入るので避けたい std::from_charsは(libstdc++が)浮動小数点型に対応していない boost::sprit::qiが何故か速いのだけれどこのためにboost::sprit使うのは重い と色々制約が多いのです。どうにかならないものか。 fast_f

              文字列から浮動小数点数に変換する、なるべく速く - toge's diary
            • 浮動小数点数の二段階丸め誤差 - hydrakecat’s blog

              さいきん『浮動小数点数小話』という同人誌を読んでFMA (Fused Multiply-Add)の二段階丸め誤差(double rounding error)について色々と知る機会があったのでまとめておく。ついでにFMAに関するOpenJDKのバグっぽい挙動を見つけたのでそれも併せて記しておく。 FMA (Fused Multiply-Add)とは FMAは以下のような演算のことを呼ぶ。 この演算自体は行列の乗算やベクトルの内積の計算でよく現れるものであるが、通常の浮動小数点数の乗算と加算を別々に行うと誤差が出るので一度の演算で正確な値を算出したいときに用いる。たとえばC言語(C99)では fma、fmaf、fmalという3つの関数が導入されているらしい。 FMAの実装における二段階丸め誤差 FMAはターゲットとなるCPUのアーキテクチャがFMA命令をサポートしていればその命令を直接呼び出

                浮動小数点数の二段階丸め誤差 - hydrakecat’s blog
              • 浮動小数点数の足し算と掛け算は可換か - Qiita

                読むのが面倒な人向けの結論:可換です。 「可換です」以外の答えを知りたい人はこの記事を最後まで読んでください。 結合法則と交換法則 実数の足し算や掛け算については結合法則 $x+(y+z)=(x+y)+z$ が成り立ちます。これに対し、浮動小数点数の足し算・掛け算が結合的でないことはとても有名な話です。 例えば、倍精度で (1 + 0x1p-200) + (-1) を計算すると、結合法則が成り立てば答えは 0x1p-200 となるはずですが、実際には 0 が返ってきます。 浮動小数点演算が結合的でないことは有名な話なので、ここではこれ以上詳しくは取りあげません。 一方で、交換法則(可換性)はどうでしょうか?「浮動小数点演算はこういう法則を満たさない!クソ!」みたいな話題で槍玉に上がるのはほとんどの場合結合法則で、交換法則に言及するものはあまり見かけない気がします。 交換法則が成り立つとどう

                  浮動小数点数の足し算と掛け算は可換か - Qiita
                • 浮動小数点数の文字列化(基数変換) | 雑記帳

                  動機付けと問題 計算機の内部では二進浮動小数点数が使われることが多い一方で、プログラムのソースコードやテキストベースのデータ形式(例:JSON)では十進小数が使われることが多い。 データのシリアライズ等で、内部的な二進浮動小数点数を十進小数に変換して、再度二進小数に戻すという操作が考えられる。この時、元々の二進小数の値が保持されることが望ましい。 有限桁の二進小数は原理的には有限桁の十進小数で表現できるが、指数部が大きかったり小さかったりすると仮数部の桁数も膨張するため実用的ではない。 そこで、基数変換の際に丸めが発生することを許容して、二進小数→十進小数→二進小数の変換が恒等写像となるようにしたい。ただし丸めの方法は最近接丸めであるとする。この時、 途中の十進小数の仮数部は何桁あれば十分か?なるべく短い桁数の十進小数を、正しい丸めで得るためのアルゴリズムはどのようなものか? という問題が

                  • 浮動小数点数オタクがAtCoder Beginner Contest 284のD問題をガチで解説してみる

                    こんにちは、浮動小数点数オタクのmod_poppoです。 昨日開催されたABC284のD問題でsqrtがどうのこうのという声がツイッターで観測されたので、ガチで考察してみます。 問題文(引用) まず最初に問題文を引用しておきます。 AtCoder Beginner Contest 284 | D - Happy New Year 2023 問題文 正整数Nが与えられます。Nは、2つの相異なる素数p, qを用いてN=p^2qと表せることがわかっています。 p, qを求めてください。 T個のテストケースが与えられるので、それぞれについて答えを求めてください。 制約 入力は全て整数 1\le T\le 10 1\le N\le 9\times 10^{18} Nは、2つの相異なる素数p, qを用いてN=p^2qと表せる 2023が7\times 17^2と素因数分解できることにちなんだ問題のよう

                      浮動小数点数オタクがAtCoder Beginner Contest 284のD問題をガチで解説してみる
                    • OpenSiv3D for Web | IEEE 754 単精度浮動小数点数

                      • 浮動小数点数の16進表記 - Qiita

                        2進浮動小数点数の10進表記には様々な問題があります。 10進で有限小数として表せる数であっても、2進小数では有限小数で表せない(したがって2進浮動小数点数に変換すると誤差が出る)ことは周知かと思います。例えば 0.1 という実数を2進で表すと という循環小数になり、有限桁で正確に表すことができません。 10進小数を正確に表したい場合は10進浮動小数点数(あるいは10進固定小数点数など、10進に基づいた小数型)を使うのが適切です。逆に、2進浮動小数点数を正確に表現したい場合はそれに適した記数法を使うのが適切です。 2進浮動小数点数に適した記数法として、1999年に制定されたC言語の規格(C99)では、16進法を使って浮動小数点数を記述する方法が導入されました。 16進の1桁は2進の4桁に対応し、2進法で有限小数で表せる数は16進でも有限小数で表せます。逆も然りです。16進表記は浮動小数点数

                          浮動小数点数の16進表記 - Qiita
                        • 浮動小数点数の min / max - Qiita

                          多くのプログラミング言語には、「2つ以上の数値が与えられた時、その最小値あるいは最大値」を返す関数 (min / max) が用意されている。入力が整数や有理数であれば難しい話はないのだが、対象が浮動小数点数の場合は厄介な問題が起こる。具体的には、「NaN の扱い」と「0 の符号の扱い」だ。 浮動小数点数の NaN は、皆さんご存知の通り、順序付けられない。NaN が絡む場合の min / max 演算については、「入力に NaN が含まれていたら結果も NaN とする」「NaN を入力の欠落として扱い、NaN でない入力があればそれを返す」などの立場が考えられる。 もっと細かいことを言うと、NaN を返す場合に入力で与えられた NaN を返すか、正規化された NaN を返すかという違いもありうるし、signaling NaN の扱いも議論の余地があるかもしれないが、この記事では細かいこと

                            浮動小数点数の min / max - Qiita
                          • 浮動小数点数オタクがM1 Macを触ってみた - Qiita

                            どうも、浮動小数点数オタクのmod_poppoです。 去年はMacのCPUがx86からArm (Apple Silicon)へ移行することが発表され、実際にApple M1搭載のハードウェアが発売されました。Apple Silicon MacにはRosetta 2というエミュレーターが搭載され、x86系のアプリケーションが(仮想化等の一部を除いて)そのまま動作します。 浮動小数点数オタクとして気になるのは、 Armv8で規定された浮動小数点数関連の命令セット拡張のうち、Apple M1がどれを実装しているのか Rosetta 2がx86_64とAArch64の浮動小数点数に関する違いをどのように吸収しているのか という点です。 Armv8のあれこれ long doubleについて long doubleは環境によって精度がまちまちなのは以前の記事に書いた通りです。 long doubleの

                              浮動小数点数オタクがM1 Macを触ってみた - Qiita
                            • 4 ビット Float を自作したら、浮動小数点数の精度を理解できた - Qiita

                              はじめに 浮動小数点数、なんとなくはわかっているものの実は理解がちょっと曖昧、という方いませんか? 僕は恥ずかしながら長らくそんな状態でした。 特に誤差と精度についてはかなり曖昧で、 「どれくらいの数値であればどれくらいの精度があるのか」 という点は全く自信がありませんでした1。(業務上、特に困ったこともなかった) この記事は、試しに4ビットの浮動小数点数を作ってみることにより、浮動小数点数の精度を理解することを目指します。 想定の読者さんは、 「浮動小数点数に関してはざっくり分かっているけど、実は精度や誤差に関してはちゃんと理解していない」 という方々です。具体的に言えば、緯度経度を32ビット浮動小数点数で表すと誤差がどれくらいになるのかがあまりピンと来ない2、という方などです3。 浮動小数点数の概要 ここでは、ざっくり浮動小数点数の概要に関して復習程度に触れます。 概要は分かっていると

                                4 ビット Float を自作したら、浮動小数点数の精度を理解できた - Qiita
                              • 浮動小数点数の限界はどこにある? 32bitのデータで表現する数字の世界

                                Unityを学ぶための動画を集めたサイト「Unity Learning Materials」。ユニティ・テクノロジーズ・ジャパンの安原氏が、ゲーム制作に使う数学について解説しました。パート4のテーマ「浮動小数点数(float)」では、その表現力の限界を具体的に探りました。 パート4のテーマは「浮動小数点数(float)」 安原祐二氏(以下、安原):パート4です。大丈夫ですか。寝ていませんか? パート4を始めていきたいと思います。浮動小数点数、floatです。 簡単な問題を出してみましょう。float aに「1f」を入れた時に、Debug.Logでそのaを出力させたらConsoleに何が出ますか? 急に聞かれると困るかもしれませんが、これは引っかけ問題ではなくて「1」が出ます。 次ですね、「1/3」。1割る3を書いたら何になるかな。これはちょっと引っかけ問題かもしれないですね。「0」になりま

                                  浮動小数点数の限界はどこにある? 32bitのデータで表現する数字の世界
                                • 浮動小数点数の非正規化数の存在意義と特徴 - Qiita

                                  先日、浮動小数点数の非正規化数と絡む機会があった。 で、非正規化数のことをよく知らなかったので調べた。 せっかく調べたのでメモを書いておく。 はじめに まあ、ふつうの環境の C / C++ の double 、ふつうの環境の ruby の Float 、いわゆる倍精度のことを念頭に。 以下、IEEE754 の 倍精度のみが唯一の浮動小数点数であるかのような感じで文章を書くけどもちろん本当はそうではないのでご注意を。 よく、C/C++ の DBL_MIN に double型の浮動小数点で表現できる正の値の最小値 などという説明が付与されているけど、これは間違っている。実際 #include <stdio.h> #include <float.h> int main(void) { printf( "DBL_MIN=%e DBL_MIN/10=%e DBL_MIN/1000=%e", DBL_

                                    浮動小数点数の非正規化数の存在意義と特徴 - Qiita
                                  • IEEE 754の十進浮動小数点数の基本

                                    浮動小数点形式 IEEE 754で規定された浮動小数点形式は、基数b, 指数部の最大値\mathit{emax}, 精度pの3つのパラメーターで表されます。このうち基数bは2または10で、この記事で扱うのはb=10の場合です。 指数部の最小値\mathit{emin}は1-\mathit{emax}と定められています。 浮動小数点数として表現できる実数は、0\le M<b^pを満たす整数M(仮数部)および\mathit{emin}-p+1\le e\le\mathit{emax}-p+1を満たす整数e(指数部)および0\le s\le 1を満たす整数s(符号)について (-1)^s\times M\times b^{e} と表現できるものです。 Mを範囲b^{p-1}\le M<b^pに収まるようにしたときに指数部が範囲に収まるものを正規化数と呼びます。 例えばb=10, p=3となる形式

                                      IEEE 754の十進浮動小数点数の基本
                                    • IEEE浮動小数点数における平方根演算の精度に関する覚書 - よーる

                                      IEEE浮動小数点数における演算では、丸め誤差が不可避です。特に、複数回の演算を繰り返すと丸め誤差が積もっていき、正確な値と大きく離れた答えを得てしまうことがあります。しかし、次の演算については、(数学的に)正確な値を求めた後、一回だけの丸めが発生することが、IEEE標準で規定されています。 四則演算 積和演算 Fused multiply add (FMA) 平方根演算(正の平方根を求める*1) 浮動小数点数演算のできるCPUであれば、普通、四則演算や積和演算を行う命令を持っています。 しかし、平方根を正確に計算する命令を持たない命令セットも存在します。 そのような場合、平方根関数はライブラリ実装となるわけですが、どのように実装すれば要求を満たせるのでしょうか? C++のstd::sqrtは正確に計算しているのか? 結論 しています。 標準の丸めモード、つまり最近接丸め(ぴったり半分なら

                                        IEEE浮動小数点数における平方根演算の精度に関する覚書 - よーる
                                      • Pythonで浮動小数点数floatの誤差を考慮して比較(math.isclose) | note.nkmk.me

                                        浮動小数点数floatを2進数表記や16進数表記に変換したい場合は以下の記事を参照。 関連記事: Pythonで浮動小数点数floatと16進数表現の文字列を相互に変換 NumPyの関数np.isclose(), np.allclose()については以下の記事を参照。 関連記事: NumPy配列ndarrayを要素ごとに比較(比較演算子、np.allcloseなど) 浮動小数点数floatの誤差 浮動小数点数floatはコンピュータの内部では2進数で表現されているため、10進数の小数と厳密に同じ値を表現できない。 例えば0.1をprint()で出力すると0.1と表示されるが、これは扱いやすい範囲に桁数が丸められているから。format()で表示桁数を増やすと実際は誤差を含んでいることが分かる。 関連記事: Python, formatで書式変換(0埋め、指数表記、16進数など)

                                          Pythonで浮動小数点数floatの誤差を考慮して比較(math.isclose) | note.nkmk.me
                                        • 浮動小数点数の加算の順序にハマった話

                                          fediverseにちょっと書いたけど、仕事でちょっとハマって数時間悩んだ話。 とあるコードを書いていて、どうもテストが安定しなくてflakyになる。つまり、通るときは通るがたまに失敗する。が、理由がよくわからない。 こういうとき、Goでよくあるのはmapのイテレーションの順序が意図的にランダム化されているというパターンだ。mapは(内部的にはハッシュテーブルが使われているので)イテレーションの順序は不定であるし、不定であるべきなので順序に依存するコードを書くべきではない。現実的にはたいていの言語ではこのへんは「実装依存である」ということになっていて、うっかりすると言語のランタイムバージョンが上がったり、キーが一個増えたり減ったりするだけで順序が狂い、突然テストが死ぬみたいな現象によくみまわれる。Goでは意図的にこの問題に対処するために、言語のバージョンが変わらなくても毎回イテレーションの

                                            浮動小数点数の加算の順序にハマった話
                                          • 浮動小数点数演算器のつくりかた(その1) - よーる

                                            最近浮動小数点数演算器を作っているので、作るときのポイントを忘れないようにメモしておきたいと思います。 以下の全4回で書いていく予定です。 最近接丸めの浮動小数点数加算器の作り方(今回) 最近接丸めの浮動小数点数乗算器の作り方 RISC-Vの規格に従った(つまり、IEEE754規格にも従った)浮動小数点数積和演算器の作り方 RISC-Vの規格に従った浮動小数点数除算・平方根両対応演算器の作り方 コード 以下の74行のVerilog HDLコードで、x86の行う最近接丸めの浮動小数点数加算と同じ結果が得られるはずです。 メモ:これを書いたのは2022/10/06で、3cycleパイプライン化したものがRSDで採用されています。 module fp_adder(lhs, rhs, result); input wire[31:0] lhs; input wire[31:0] rhs; outp

                                              浮動小数点数演算器のつくりかた(その1) - よーる
                                            • 文字列少数点数表記を IEEE754 倍精度浮動小数点数にエンコードする方法|Sukesan1984

                                              42tokyoというパリ発のエンジニア養成機関で学んでいるのですが、表題の関数が課題で必要になったため、絶対に将来忘れる気がしてならないので自分への備忘録として書き記しておきたいと思います 恥ずかしながら、今まであまりちゃんと浮動小数点数について考えたことがなく、かなり初心者なので、間違っていることがあるかもしれないのですが、そのときはご指摘いただけると嬉しいです こちらの記事を多分に参考にさせていただいています 何度か読み直してみましたが、大変わかりにくくてすみません・・・ 自分でも読んでてよくわからなくなりそうになります 都度、参考実装へのリンクを貼っているのでもしか、興味ある方いればそちらを見てもらったほうが早いかもしれません ソースコードはこちら 動機まず、表題の処理が何故必要なのか?というと42の課題で、Raytracingに関する課題があり、その中でファイルから物体の位置やら色

                                                文字列少数点数表記を IEEE754 倍精度浮動小数点数にエンコードする方法|Sukesan1984
                                              • 浮動小数点数小話:だめぽラボ

                                                浮動小数点数の各種話題を取り扱っています。 筆者がこれまでにブログ、Qiita等に書いた内容の一部と、新規の書き下ろしを含みます。 第1章 浮動小数点数の基礎 第2章 十六進表記 第3章 FMA (fused multiply-add) の話 第4章 丸め方法とその指定 第5章 二段階丸めとその問題点 第6章 浮動小数点例外 サポートページ:https://lab.miz-ar.info/floating-point/

                                                  浮動小数点数小話:だめぽラボ
                                                • 浮動小数点数の表現と誤差 - Floating Point Number

                                                  はじめに デジタル計算機におけるデータは、全て有限の bit によって表現されています。 ですから、 ある値を表現するために仮に N bit 使っているとするならば、 その値とは高々 2 N の状態しか取りえないわけです。 しかし、 数学における実数とは無限の値を取りうるものであり、 どんなに狭い区間だけを対象とすることにしても、 その区間内に無限個の値が存在するような代物です。 では、 そんな実数を、 高々数十とか百数十のビット数でどのように表現するのでしょうか。 そのことで、 どんな事態が起るのでしょうか。 浮動小数点形式 デジタル計算機を使って数値を表現する場合、 まず、 私たちは数値を『整数』と『実数』とに区別します。 デジタル計算機で用いる整数とは、 零を中心にプラス側とマイナス側にほぼ同じ拡がりを持つ変域を持ち、 その絶対値の最大値は整数表現に用いるビット数で決まります。 一方

                                                  • 浮動小数点数を分かりやすく解説

                                                    浮動小数点数とは、コンピュータにおける数値を表現する方法の一つで、主に小数点を含む数値を表現するときに利用されています。 浮動小数点数の形式浮動小数点数は次のように「符号」「指数部」「仮数部」の形式で表現します。※32ビットの例 符号:正の数が0、負の数が1指数部:2nのnの部分を2進数表記にした値を格納(負の数の場合は2の補数を使用)仮数部:正規化した小数点以下の値を格納 浮動小数点数の「仮数部」には小数点以下の値が入り、指数部には2nのnを2進数にした値が入ります。 正規化とは浮動小数点数の仮数部には正規化した値(小数点以下の値)が入ります。正規化とは、小数点の位置を調整し最上位桁を0以外の値にする作業のことです。 スポンサーリンク 次の図は正規化のイメージ例です。 「0.036×10-2」「0.00036×100」「0.0036×10-1」は同じ値です。この値を「0.36×10-3」

                                                      浮動小数点数を分かりやすく解説
                                                    • JavaScriptの浮動小数点数を符号なし64ビット整数で表現したい - Qiita

                                                      はじめに JavaScriptにおける数値は、倍精度浮動小数点数しかないわけですが、倍精度浮動小数点数を構成するビット列を符号なし64ビット整数で表現した値が欲しいという場面がありました。このやり方について調べたので、記事にしてみました。 変換方法 function DoubleToBigInt(f) { var buf = new ArrayBuffer(8); (new Float64Array(buf))[0] = f; lower = BigInt((new Uint32Array(buf))[0]); upper = BigInt((new Uint32Array(buf))[1]); return (upper << BigInt(32)) | lower; } 上記のコードでは、ArrayBufferを経由して、倍精度浮動小数点数から2つの符号なし32ビット整数に変換していま

                                                        JavaScriptの浮動小数点数を符号なし64ビット整数で表現したい - Qiita
                                                      • [解決!Pythonï¼½f文字列の置換フィールドをネストさせて、整数や浮動小数点数の書式化方法を動的に切り替えるには

                                                        # 浮動小数点数の精度を変更する n = 123.4567 result = f'{n:.5f}' print(result)  # 123.45670 precision = 5 result = f'{n:.{precision}f}' print(result)  # 123.45670 for precision in range(5): result = f'{n:.{precision}f}' print(result) # 出力結果: #123 #123.5 #123.46 #123.457 #123.4567 # 2進/10進/16進の切り替え n = 2050 for flg in ['b', 'd', 'x']: tmp = "_b" if flg == "b" else "#08x" if flg == "x" else "+08d" result = f'{n:{t

                                                          [解決!Python]f文字列の置換フィールドをネストさせて、整数や浮動小数点数の書式化方法を動的に切り替えるには
                                                        • 不必要に浮動小数点数を使うの怖い - えびちゃんの日記

                                                          競プロにおいて、「何かしらの整数を大小比較して、左辺が大きければどうのこうの」みたいなことをしたい局面はそれなりにあります。 特に、境界付近でも正確に評価できる必要がある状況も多いです。 そうした状況で浮動小数点数を使うのはできるだけ避けたいですという気持ちがあります。 導入 まず、浮動小数点数は誤差が出ます*1。 初心者のうちは「浮動小数点数では \(1\div 10\) を正確には計算できない」と聞いても、「たとえば assert_eq!(1.0 / 10.0, 0.1); とかはエラーにならないし、問題なく計算できているのでは?」みたいな誤解をすることもあります。 実際には、0.1 と書いた部分も計算前の時点で 0.1000000000000000055511151231257827021181583404541015625 のような値になっており、所望の状態にはなっていません。 1

                                                            不必要に浮動小数点数を使うの怖い - えびちゃんの日記
                                                          • 浮動小数点数の丸めの相対誤差を計算機イプシロンで評価する

                                                            実数を浮動小数点数に丸めるときに相対誤差がどのくらいになるかを考えます。実数を浮動小数点数に丸める関数をR\colon\mathbf{R}\rightarrow\mathbf{F}とした時に \left|\frac{R(x)-x}{x}\right| あるいは \left|\frac{R(x)-x}{R(x)}\right| を評価したいです。 ここでは浮動小数点数の基数はb、精度はp桁とし、指数部の範囲は無制限とします。 区間b^i\le \lvert x\rvert\le b^{i+1}での浮動小数点数の刻み幅はb^{i-p+1}となります。この刻み幅をulp (unit in last place) と呼びます。 丸め関数Rは次の性質を満たすべきです: 単調である:x\le yの時、R(x)\le R(y) 元の値との差は1ulp未満である:b^i\le \lvert x\rvert

                                                              浮動小数点数の丸めの相対誤差を計算機イプシロンで評価する
                                                            • 1. 浮動小数点数(IEEE754)

                                                              10 進数の実数を浮動小数点数(IEEE754)形式の 2 進数に変換 A を 10 進数の実数とする 「符号部」を求める。元の値が 0 以上なら 0、 マイナスの値なら 1 Aの絶対値 |A| を固定小数点数形式の2進数に変換する(小数以下の有効桁数は十分に大きく取る) 小数点を左右に移動して整数部を 0b1 の 1 桁のみにする(※ 先頭に0が入っている場合は取り除く)。小数点を移動した回数を E とする(右方向がマイナス、左方向がプラス) 「指数部」を求める。(3)で求めた E に $2^{(指数部の長さ-1)}-1$ (※下の補足参照)を足して 2 進数に変換する。表1で示した長さ(ビット数)になるように先頭を0で埋める 「仮数部」を求める。(3)で求めた 2 進数の先頭から "0b1." を取り除いた部分を M とする。もしMが表1で示した長さ(ビット数)よりも大きい場合は末尾を

                                                              • 【JavaScript】浮動小数点の演算誤差対処法 - Qiita

                                                                はじめに 小数点を含んだ演算では、演算結果に誤差が生じ、意図した結果が得られないが場合ある。 これは、内部的には数値を (10進数ではなく) 2進数で演算しているため生じた誤差。 本記事は小数点を含んだ演算で厳密に結果を得る必要がある、あるいは値を比較する場合の誤差対処法について紹介する。 対処法 方法1 1. 値をいったん整数にしてから演算する 2. 1.の結果を再び小数に戻す // 演算結果に誤差が生じる console.log(0.2 * 3); // 桁数を上げて演算して、結果を再び小数に戻す console.log(((0.2 * 10) * 3) / 10);

                                                                  【JavaScript】浮動小数点の演算誤差対処法 - Qiita
                                                                1

                                                                新着記事