並び順

ブックマーク数

期間指定

  • から
  • まで

1 - 40 件 / 130件

新着順 人気順

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

  • ECMAScriptの浮動小数点数の丸め仕様がスゴい - hnwの日記

    ECMAScriptの浮動小数点数の丸め関数である Number.prototype.toFixed() について調べてみたところ、浮動小数点数をわかっている人が作った硬派な仕様だと感じたので、解説してみます。 浮動小数点数の丸めの善し悪しについて 私はプログラミング言語の浮動小数点数の丸め処理に興味があり、過去に関連記事を30本以上書いています。こうした活動から得られた知見として、良い丸め関数には次のような性質があると考えています。 仕様がシンプルで直感的であること 仕様が抜け漏れなく文書化されていること バグを作り込みにくい仕様であること どれも良い関数の一般論のような話ですが、丸め処理に限って言えば簡単な話ではありません。そもそも浮動小数点数の性質が人の直感に反するため利用者にとっても実装者にとっても罠が多く、結果として上の条件を満たせないことが多いのです(私が面白いと感じるポイント

      ECMAScriptの浮動小数点数の丸め仕様がスゴい - hnwの日記
    • 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
        • 浮動小数点計算の基本的事実 – 「浮動小数点数は実数ではない」ということ | POSTD

          浮動小数点数はどこにでもあります。これを使わないソフトウェアは、簡単には見つかりません。ソフトウェアの記述に不可欠な何かのために、浮動小数点数を扱う際に私たちが非常に注意を払っているのだと思われるかも知れませんが、普通はそうではありません。多くのコードでは、浮動小数点数は実数として扱われ、多くのコードが無効な結果を生みます。この記事では、浮動小数点数の反直感的な性質をいくつか紹介します。 これらの性質は、計算を正確に行うために知っておかなければならないことです。 x + y == x この第1の規則は、大きさの規則です。加算および減算をする際、お互いの数が他方の数に対して、有意味な結果を生めるだけの大きさが必要です。ここで大きさは、指数部の差を尺度とします。 例えば、値 1e-10 の大きさは、 1e10 に比べてとても小さいです。通常の64ビット浮動小数点数では、この小さな数を好きなだけ

            浮動小数点計算の基本的事実 – 「浮動小数点数は実数ではない」ということ | POSTD
          • 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
            • 浮動小数点って何? - Qiita

              件のまとめでは「今の時代になって…」という意見も出てたりしますが、浮動小数点が何か知ってる人にはアタリマエの知識であっても、そうでないと単なる小数データとしか見えなくて、下手すると「計算でズレが出るなんてケシカラン!」という印象を抱くことも少なくないようです。 …本来であれば、(大抵の言語に標準で備わっているデータの種類なので)入門書等で知識を身に着けておくものかと思いますが、ちゃんと説明があるか?というとあまり無いようにも思いますので、ざっくり記事にすることにしました。 固定小数点と浮動小数点 一言で言えば、浮動小数点というのは一般の人が想像するような小数ではなく、計算で誤差が発生することを前提とした数値データのことです。 逆に言えば、浮動小数点を使う時は常に近似計算であることを意識し、結果の精度を考えろということでもあります。 それだけだと、何でそんなイケてないことするの? と疑問に思

                浮動小数点って何? - Qiita
              • 第70回PHP勉強会で浮動小数点数の話をしました - hnwの日記

                7月22日に開催された第70回PHP勉強会で発表してきました。以下が発表資料です。 浮動小数点数周りのトピックを3点紹介する内容でしたが、思ったより反応が良かったように思います。 ただ、面白おかしく話そうとして、聞いている方々に無駄に恐怖を与えてしまったかもしれません。冷静に読み返していただければ、怖いように見える内容もレアケースの話題が多いことがわかるかと思います。 また、PDOの挙動については誤解を与えてしまったかと思いますので、プレゼン資料の25ページ目を大幅に差し替えてアップロードしました。 この点についてもう少し説明します。PDOでプリペアードクエリを利用する際、プレースホルダに値を埋め込むのにPDOStatement::bindValueメソッドを利用することができます。この際、bindValueメソッドの第3引数で利用でPDO::PARAM_INT定数を指定しても、第2引数の

                  第70回PHP勉強会で浮動小数点数の話をしました - hnwの日記
                • 浮動小数点数型と誤差

                  有限桁 C言語で扱える実数値は,2進数の有限小数で表された数値である.例えば次のようなものである. 1.5(10) = 1.1(2) 3.25(10) = 11.01(2) 理論的には小数が無限に続く値でも,そのうちの有限個の桁数でその値を表すしかない. 例えば,0.1 を2進数の小数で表すと 0.1(10) = 0.000110011001100110011...(2) と無限に続くが,コンピュータの内部では有限桁で丸められている. このような場合には,本当の値ではなく,近似値でしか表すことができない. 指数表記(浮動小数点表記) 科学計算では非常に大きな実数値や非常に小さな実数値も扱うことがある. そのようなときには,通常の10進数の表記ではなくて,次のような指数表記で表すれば 無駄な 000...000 という桁を表記しなくてもよくなる. 1234567890000000000000

                    浮動小数点数型と誤差
                  • Go言語の浮動小数点数のお話

                    元ネタ: [JavaScriptの問題] var a = 0.3 - 0.2; var b = 0.2 - 0.1; var c = a==b; cの中身はどれ? — RAO(らお)@けもケP-31 (@RIORAO) 2017年10月24日 正確な実数計算をやらされるJavaScriptくん #擬竜戯画 pic.twitter.com/ipE56C2YbV — RAO(らお)@けもケP-31 (@RIORAO) 2017年10月26日 コンピューターで浮動小数点数を扱ったことのある人なら一度は経験する、 数学上の計算とコンピューター上の計算が合わない計算の一例ですね。 この件に関して、Go言語では正しく(=数学的な結果と同じように)計算できるとの情報が。 おそらくGoはコンパイラがa=0.1とb=0.1に変換していると思われます。 添付した画像のコードだとtrueになりますが、const

                    • "「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
                      • 浮動小数点数 - Wikipedia

                        浮動小数点数(ふどうしょうすうてんすう、英: floating-point number)は、実数をコンピュータで処理(演算や記憶、通信)するために有限桁の小数で近似値として扱う方式であり[1]、コンピュータの数値表現として広く用いられている。多くの場合、符号部、固定長の指数部、固定長の仮数部、の3つの部分を組み合わせて、数値を表現する。 概要[編集] この節はパターソンらの記述に基づく[1]。 実数は0以上かつ1以下のような有限の範囲でも、無限個の値(種類)が存在するため、コンピュータでは妥当なビット数で有限個の値(種類)の近似値で扱う必要がある。 実数-1/3は10進数表現では無限小数となるが、有限桁の小数で近似値を表記できる。下の例では10進数での4桁としている。 -1/3 -1 x 0.33333333333333... -1 x 0.3333 x 100 -1 x 3.333 x

                        • 文字列から浮動小数点数に変換する、なるべく速く - 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
                            • まつもと直伝 プログラミングのオキテ 第15回 浮動小数点数の謎に満ちた世界

                              前回はコンピュータにおける整数の扱いについて学びました。今回はさらに奥に入り,小数について調べてみましょう。コンピュータ上の小数は整数以上に複雑な謎に満ちているのです。 小学校に入学したばかりのころ,算数の時間に学んだ「数」は整数,それも正の数だけでした。しかし,学年が進むと1よりも小さい数を取り扱う小数が登場します。0.2や1.5ですね。高等学校では数の範囲が広がり,小数を実数の一種として考えます。 コンピュータにおける小数の扱い コンピュータでも小数を取り扱います。プログラムで小数点を含む数を書くと小数を表します。 このRubyのプログラムは0.2という数を1つ用意し,出力します。Rubyの場合,すべてのデータはオブジェクトですから小数もオブジェクトです。小数を表現するオブジェクトのクラスをFloatと呼びます。数なのにfloat(浮く,浮かぶ)とはおかしな名前ですが,これはコンピュー

                                まつもと直伝 プログラミングのオキテ 第15回 浮動小数点数の謎に満ちた世界
                              • 浮動小数点数型と誤差

                                有限桁 C言語で扱える実数値は,2進数の有限小数で表された数値である.例えば次のようなものである. 1.5(10) = 1.1(2) 3.25(10) = 11.01(2) 理論的には小数が無限に続く値でも,そのうちの有限個の桁数でその値を表すしかない. 例えば,0.1 を2進数の小数で表すと 0.1(10) = 0.000110011001100110011...(2) と無限に続くが,コンピュータの内部では有限桁で丸められている. このような場合には,本当の値ではなく,近似値でしか表すことができない. 指数表記(浮動小数点表記) 科学計算では非常に大きな実数値や非常に小さな実数値も扱うことがある. そのようなときには,通常の10進数の表記ではなくて,次のような指数表記で表すれば 無駄な 000...000 という桁を表記しなくてもよくなる. 1234567890000000000000

                                • 浮動小数点数の同値比較には計算機イプシロンを使うこと - Tociyuki::Diary

                                  コメントのご指摘のとおり Float::EPSILON は相対誤差のため、比較したい f と g の絶対値の大きな方を掛けるように比較条件式を変更しました。ご指摘ありがとうございます。 技術評論社御中。WEB+DB PRESS Vol.51 を送っていただきありがとうございます。 Vol. 51 の特集 1 は Ruby On RAILS を業務システムへ応用するノウハウ満載で、読み応えがあります。 ただ、1点だけ。以下の箇所を補足したいと思います。 浮動小数点問題 業務アプリケーションでよく問題になるのが浮動小数点です。浮動小数点の問題とは、本来0、1しか扱えないコンピュータでは一部の小数点を正確に表現できないため、計算を行ううちに誤差が生じてしまうという問題のことです。 その精度は環境によって左右されますが、たとえば筆者の環境では次のような奇妙な結果になります。 > 1.0 - 0.9

                                    浮動小数点数の同値比較には計算機イプシロンを使うこと - Tociyuki::Diary
                                  • 小数(浮動小数点数型)の計算が思った結果にならない理由と解決法、Decimal型はいつ使うか?

                                    小数(浮動小数点数型)の計算が思った結果にならない理由と解決法 Decimal型はいつ使うか?小数の計算をしていて、その計算結果が常識では考えられない、変な値になったという経験はないでしょうか?単精度浮動小数点型であるSingle型(C#では、float型)や、倍精度浮動小数点数型であるDouble型(C#では、double型)を使った計算ではそのようなことがあります。ここではそのようなことが起こる理由と、その対策を説明します。 また、Decimal型はどのような時に使うのかについても説明しています。 不可解な小数の計算の例「0.1 + 0.2 = 0.3」は正しいでしょうか?数学では、当然そうでなくては困ります。 それでは、VB.NETで「0.1 + 0.2 = 0.3」(C#では、「0.1 + 0.2 == 0.3」)は「True」になるでしょうか?実は「False」になります。信じら

                                      小数(浮動小数点数型)の計算が思った結果にならない理由と解決法、Decimal型はいつ使うか?
                                    • 浮動小数点数の足し算と掛け算は可換か - Qiita

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

                                        浮動小数点数の足し算と掛け算は可換か - Qiita
                                      • 浮動小数点数の話 2013年度版

                                        Organizácia školského roka 2014/2015 na ZŠ Vazovova 4 BratislavaPROMOSPRAVY.sk

                                          浮動小数点数の話 2013年度版
                                        • 浮動小数点数について本気出して考えてみた - 一から勉強させてください( ̄ω ̄;)

                                          (2016/12/30 追記)コメントでご指摘頂いた箇所に関して修正しました。 この前たまたまこちらの記事を見つけて、浮動小数点数について全然理解してないなって思ったので勉強してみました。 前提 コンピュータの中に保存されているデータはすべて 0 と 1 の集まり(ビット列)で表現されている。そしてどういうビット列をどういう値として解釈するかは特に決まっておらず、使う人が勝手に決めていい。でもそれだと混乱を招くのでルールを作る必要がある。ルールは人間が勝手に決めた約束事に過ぎない。 固定小数点数と浮動小数点数 コンピュータは 0 と 1 しか表現できないから小数点.も表現できない。よって小数点付きの実数を表すときのルールが必要となり、そのルールとして固定小数点数と浮動小数点数がある。 固定小数点数 ビット列のどこに小数点をつけるか、あらかじめピンポイントで決めてしまう。 例えば「下 1 桁

                                            浮動小数点数について本気出して考えてみた - 一から勉強させてください( ̄ω ̄;)
                                          • 浮動小数点数の文字列化(基数変換) | 雑記帳

                                            動機付けと問題 計算機の内部では二進浮動小数点数が使われることが多い一方で、プログラムのソースコードやテキストベースのデータ形式(例: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問題をガチで解説してみる
                                              • 浮動小数点数パースにおけるヒープオーバーフロー (CVE-2013-4164)

                                                Posted by tenderlove on 22 Nov 2013 Translated by unak Ruby において、浮動小数点数のパース時にヒープオーバーフローが発生しうるという問題が報告されました。 この脆弱性は CVE-2013-4164 として CVE に登録されています。 脆弱性の詳細 文字列を浮動小数点数値に変換する際に、意図的にヒープオーバーフローを発生させる文字列を構成できることが判明しました。 これによって、セグメンテーションフォールトによるサービス拒否攻撃を行うことができ、また、潜在的には不正なコードの実行を可能とする可能性があります。 出所不明なデータを受け付けて浮動小数点数値に変換する全てのプログラム (例えば JSON 形式での入力を受け付けるものなども該当します) が、この脆弱性の影響を受けます。 例えば、以下のようなコードが該当します: この不具合

                                                • Rubyの浮動小数点数リテラルの扱いは正しいのか - hnwの日記

                                                  題名の通りなんですが、前回の記事「PHP以外全員不正解」に対して「ダウト!」を頂戴したのでまとめてみます。 Cのこの動作が、唯一無二絶対のものであるとする根拠はどこにあるのでしょうか? strtod によれば、 If the subject sequence has the decimal form and at most DECIMAL_DIG (defined in ) significant digits, the result should be correctly rounded. If the subject sequence D has the decimal form and more than DECIMAL_DIG significant digits, consider the two bounding, adjacent decimal strings L and

                                                    Rubyの浮動小数点数リテラルの扱いは正しいのか - hnwの日記
                                                  • Island Life - 拡張浮動小数点数の扱い

                                                    About 南の島のプログラマ。 たまに役者。 Practical Schemeの主。 WiLiKi:Shiro 最近のエントリ 無限cxr高校受験Defense振り返ってみると2019年は色々学んで楽...覚えるより忘れる方が難しい(こともある)眼鏡のつると3DプリンタIris Klein Acting ClassSAG-AFTRA conservatory: Voice Acting創作活動って自分を晒け出さねばならないと...ループを使わずに1から100までMore... 最近のコメント shiro on 歳を取ると時間が速く過ぎるのは、新しいことに挑戦しないから? (2023/03/14)1357 on 歳を取ると時間が速く過ぎるのは、新しいことに挑戦しないから? (2023/03/01)ベアトリーチェ on ハイポハイポハイポのシューリンガン (2022/04/02)ベアトリーチ

                                                      Island Life - 拡張浮動小数点数の扱い
                                                    • 浮動小数点数の丸め処理を見比べてみる - hnwの日記

                                                      各種プログラミング言語には、切り上げ・切り捨て・四捨五入など浮動小数点数を丸める関数が何種類もあります。こうした丸め処理を利用する際、「ceilとfloorどっちがどっちだっけ?」「マイナスの数が来た時の挙動って大丈夫なんだっけ?」などと不安になることはないでしょうか。 僕が丸め関数を使うときは、バグが無いかどうか他の場所以上に警戒します。というのも、これらの関数は境界値ピッタリだった場合の挙動とマイナスの数に対する挙動がそれぞれ違っており、勘違いや考え漏れから境界値バグを作り込みやすいためです。僕と同じ感覚の人も多いのではないでしょうか。 本稿では、こうした関数の挙動が一目でわかる便利なグラフを紹介します。このグラフは『WEB+DB PRESS Vol.57』に掲載いただいた僕の記事「PHP転ばぬ先の杖 第2回 数値の正しい扱い方 ― 浮動小数点数、巨大な整数」でも紹介したものです。以下

                                                        浮動小数点数の丸め処理を見比べてみる - hnwの日記
                                                      • JSON::XSで作られる浮動小数点数でハマった話 - Pixel Pedals of Tomakomai

                                                        JSON::XSを使うと、小数は浮動小数点数にパースしてくれる。 use JSON::XS qw(decode_json); my ($double) = @{decode_json("[0.6]")}; この値、printすると "0.6" なのだけど、0.6とイコールではない。 print $double, "\n"; # 0.6 print +($double - 0.6), "\n"; # 1.11022302462516e-16 なので、直感と違う振る舞いをしたりする。 # 3 / 0.6 == 5 printf "%s / %s == %s\n", 3, 0.6, int(3 / 0.6); # 3 / 0.6 == 4 <- unexpected :( printf "%s / %s == %s\n", 3, $double, int(3 / $double); 仕方ないので

                                                          JSON::XSで作られる浮動小数点数でハマった話 - Pixel Pedals of Tomakomai
                                                        • 浮動小数点数

                                                          (過去問題から憶える) 数値を16ビットの浮動小数点表示法で表現する。形式は図に示すとおりである。10進数0.375を正規化した表現はどれか。ここでの正規化は,仮数部の有効数字よりも上位の0がなくなるように指数部を調節する操作である。(H9 秋 問13) S:仮数部の符号(正は0,負は1) E:2のべき乗の指数部で,負数は2の補数 M:仮数部の絶対値 【解説】 10進数0.375を2進数に変換する。 【クレバー方式】 10進数→2進数 小数部とくれば 2を掛けろ 0.375×2=0.75 0.75 ×2=1.5 0.5  ×2=1.0 10進数0.375を2進数に基数変換すると,0.011。 浮動小数点数で表現すると,0.011×20。 ここでの正規化は,仮数部の有効数字よりも上位の0がなくなるように指数部を調節するとあるので,正規化すると0.11×2−1。

                                                          • Steve Wozniakによって書かれた浮動小数点数演算ライブラリのソースコード

                                                            江添亮 自由ソフトウェア主義者 C++ Evangelist C++標準化委員会の委員 ドワンゴ社員 C++11本を執筆した。 株式会社ドワンゴで働いている。 Mail:boostcpp@gmail.com Twitter:@EzoeRyou GitHub: https://github.com/EzoeRyou 江添亮のマストドン@EzoeRyou 筆者にブログのネタを提供するために、品物をアマゾンお気に入りリスト経由で送りたい場合: Amazon.co.jp: 江添亮: 江添のほしい物リスト 筆者にブログのネタを提供するために、直接に品物を送りたい場合、住所をメールで質問してください。 View my complete profile ► 2020 (31) ► December (2) ► November (2) ► September (2) ► August (4) ► Jul

                                                            • 浮動小数点数について - komiyamの日記

                                                              はじめに この記事はCompetitive Programming Advent Calendar12月10日分の記事です。 誤差が原因でWAになる問題が嫌いな人は決して少なくないと思います。「こんなのは本質的なことではない」という人もいるでしょう。誤差を回避することが本質となるような問題がコンテストに出てもきっと人気は出ないでしょう。自分も以前は誤差死の起きうる問題は嫌いでしたが、最近はそれを回避するのも面白さだと感じるになってきました。 しかし面白いとかつまらないとか好きとか嫌いとか以前に非ACは悔しいものです。なので今回は、誤差死などを回避するために地味なネタである浮動小数点数について書こうと思います。 A+B problem とりあえず、いろんなオンラインジャッジで最初の1問目として見ることの多いA+B problemを解いてみましょう。よくあるのは整数の和を出力させる問題ですが、

                                                                浮動小数点数について - komiyamの日記
                                                              • 【後藤弘茂のWeekly海外ニュース】 AMD Zen 2は実行パイプライン拡張で浮動小数点性能が2倍に

                                                                  【後藤弘茂のWeekly海外ニュース】 AMD Zen 2は実行パイプライン拡張で浮動小数点性能が2倍に
                                                                • OpenSiv3D for Web | IEEE 754 単精度浮動小数点数

                                                                  • Monoで巨大な浮動小数点数を丸めたら無限大になった - hnwの日記

                                                                    Monoのround関数にバグを見つけたよ、という毎度おなじみの話題です。 早速ですが、浮動小数点数で扱える一番大きい数を浮動小数点数以下第2位で丸めて第1位までにしてみましょう。 using System; class RoundingBigFloat { static void Main() { double d = Double.MaxValue; Console.WriteLine(d); // 1.79769313486232E+308 Console.WriteLine(Math.Round(d, 1)); // Infinity } } 上記コードのコメント部の通り、大きい数を丸めると無限大になることがあります。これは、小数点以下第n位までに丸める処理が、「10^n倍して整数に丸めて10^-n倍する」という処理になっているため、この計算の途中で無限大になってしまうことがあるの

                                                                      Monoで巨大な浮動小数点数を丸めたら無限大になった - hnwの日記
                                                                    • 「浮動小数点数」 ~マンガでプログラミング用語解説

                                                                      CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

                                                                        「浮動小数点数」 ~マンガでプログラミング用語解説
                                                                      • 浮動小数点数の等値比較 - Qiita

                                                                        二つの浮動小数点数が等しいかどうかを等値演算子で比較してはいけない。浮動小数点数には誤差があるため、直観的には等しいはずの二つの数が異なる場合がある。以下のRubyのスクリプトを実行すると 10.times { tmp += 0.1 } values = [[1.0 - 0.9, 0.1], [0.15 + 0.15, 0.1 + 0.2], [tmp, 1.0]] values.each {|pair| lhs, rhs = pair printf("lhs = %.18f, rhs = %.18f, diff = %.18f, == = %p\n", lhs, rhs, (lhs - rhs).abs, lhs == rhs); } lhs = 0.099999999999999978, rhs = 0.100000000000000006, diff = 0.000000000000

                                                                          浮動小数点数の等値比較 - Qiita
                                                                        • 浮動小数点数 Tips

                                                                          浮動小数点数の表現に関する、特徴的な部分や罠にはまりそうな部分の非包括的すぎるメモ。浮動小数点数がおおざっぱに x * (2 ** y) みたいに表現されていることは知っているけど、詳細はよく知らんという向け。 正規化数と非正規化数 浮動小数点数の符号化方式として標準的な IEEE754 では、 ± (1.xxxx) * 2 ** (yyyy - bias) // xxxx, yyyy は二進数 の形で符号、仮数部 xxxx 、指数部 yyyy を符号化する。仮数部の 1 は符号化しないのがポイント。 1-bit 節約できる以上に、仮数部が自然に [1, 2) の範囲に制限され、任意のビット列 xxxx yyyy と浮動小数点数が (だいたい) 1:1 対応するのが気持ちいい。この形で表される数を正規化数と呼ぶ。 ただ、このままでは表現できる値の絶対値に下限ができてしまう。0 も表現できな

                                                                          • 浮動小数点数型と誤差

                                                                            有限桁 C言語で扱える実数値は,2進数の有限小数で表された数値である.例えば次のようなものである. 1.5(10) = 1.1(2) 3.25(10) = 11.01(2) 理論的には小数が無限に続く値でも,そのうちの有限個の桁数でその値を表すしかない. 例えば,0.1 を2進数の小数で表すと 0.1(10) = 0.000110011001100110011...(2) と無限に続くが,コンピュータの内部では有限桁で丸められている. このような場合には,本当の値ではなく,近似値でしか表すことができない. 指数表記(浮動小数点表記) 科学計算では非常に大きな実数値や非常に小さな実数値も扱うことがある. そのようなときには,通常の10進数の表記ではなくて,次のような指数表記で表すれば 無駄な 000...000 という桁を表記しなくてもよくなる. 1234567890000000000000

                                                                            • 浮動小数点数の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
                                                                              • 浮動小数点数内部表現シミュレーター - instant tools

                                                                                コメント IPAの情報処理試験の勉強用としてと、JavaScriptで小数の計算の誤差が なぜ発生するのかきちんと理解したかったので作成しました。 おかげで「0.1 + 0.2」がなぜ0.3にならないのかが、ビット単位で把握できました。 丸め方式の1つに、丸める前の実数と距離的に最も近い数に丸める、 RN (Round toNearest)方式があります。 m進数で「m/2-1捨m/2入」、10進数だと四捨五入、2進数だと0捨1入になります。 誤差をできるだけ小さくする方法として利用されます。 ただしIEEE754のRN方式は偶数丸めと呼ばれる、2つの桁を使って判断する方法を採用しています。 「00」→「00」、「01」→「00」、「10」→「10」、「11」→「100」。 0.1と0.2は1桁異なる値であり、かつ どちらも仮数部の最下位ビットが繰り上がった値になります。 その結果0.1と

                                                                                • 浮動小数点数の min / max - Qiita

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

                                                                                    浮動小数点数の min / max - Qiita