ちょっと前にblueskyで見かけた話題。もとは「GraphQLのスキーマではintが32ビットしかなくて、64ビット整数とかないのがイケてない」といった話だったかなと思う。直感的にはこれは「Javascriptではすべてが倍精度浮動小数点数だから64bit intがないから」ということになるが、よくよく調べてみるといろいろややこしい歴史的事情があるようだ。 たしかにJSにはもともとひとつのNumber型しかなく、いわゆるdouble型(倍精度浮動小数点)だけで数値を表現してきた。IEEE754の倍精度浮動小数点数は仮数部が52ビットあるので、実際には32ビット整数ていどであれば全て誤差なく表現できる。なので32ビット整数または倍精度浮動小数点数がどちらも使えるというふうに理解されてきた。 そうはいっても不便なので、現代のJSにはBigIntがある。ES2020で導入されたらしい。ただし普
Herbie detects inaccurate expressions and finds more accurate replacements. The red expression is inaccurate when x > 1; Herbie's replacement, in blue, is accurate for all x. Herbie improving accuracy on the “Hamming” benchmark suite. Longer arrows are better. Each arrow starts at the accuracy of the original expression, and ends at the accuracy of Herbie’s output, in each case on random double-pr
昔話 それは昔々のこと。 x86には浮動小数点演算を行う手段がなく、外付けの浮動小数点演算ユニットを接続するという手法で、浮動小数点演算を実現していたのであった。 x87と呼ばれたそれはとてもエクセレントなシステムで…という話はwikipediaに譲ろう。 https://ja.wikipedia.org/wiki/Intel_8087 重要なのは、x87が内部表現として80bitの拡張倍精度を使っている、ということ。 これのおかげで、x87においては、確かにdoubleのほうが速かった (floatだとdoubleへのキャストコストが発生するため) 嘘だろそれ。ASM見たら別にキャストとかしてなかったわ。 どっちかというと丸めの影響で精度が異なることのほうが重要だわ。 改めて調べてみると、doubleが速いとされている資料についてはあんまりないことに気付く。 (同等としている資料はher
有限桁 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
// #include <float.h> // FLT_EPSILON, DBL_EPSILON, LDBL_EPSILON // #include <math.h> // fabsf, fabs, fabsl, fmaxf, fmax, fmaxl /* float型(倍精度浮動小数点数) */ if (fabsf(a - b) <= FLT_EPSILON * fmaxf(1.f, fmaxf(fabsf(a), fabsf(b)))) {} /* double型(単精度浮動小数点数) */ if (fabs(a - b) <= DBL_EPSILON * fmax(1, fmax(fabs(a), fabs(b)))) {} /* long double型(四倍精度浮動小数点数) */ if (fabsl(a - b) <= LDBL_EPSILON * fmaxl(1.L, fm
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く