キムラデービーブログ

オープンソースデータベースを加速する「キムラデービー」のブログです。カレー日記を兼ねてます。なお著者は2010-06-01より日本オラクルに在籍していますが、本サイト(ブログ、またはウェブサイト)において示されている見解は、私自身の見解であって、オラクルの見解を必ずしも反映したものではありません。
<< "Firebird on the road from V4 to V5"(8) Firebird 4でのタイムゾーン管理 | main | Firebird 5.0のプラン:投票結果が多い機能(1) >>
Firebirdのround()の話
0
    Firebirdのround()の話

    本エントリはFirebird Advent Calendar 2019の13日目です。

    以下の二つのブログ記事に触発されて、Firebirdの動作を確認するものです。

    PostgreSQLのround()の話

    Oracle Databaseのround()の話

    短くまとめると、人はround()に四捨五入を期待するけど、その動作は誤差のない数値(NUMBER, DECIMAL, NUMERIC、等のいわゆるexact-value)を引数にしたときだけであって、誤差のでる数値(DOUBLE PRECISION, FLOAT、等のいわゆるapproximate-value)のround()の場合は、実装により、exact-value同等に処理される場合も、誤差がでる場合もあるし、内部的にCライブラリを使っていると銀行家の丸め(Banker's round)になる実装もあるよ、ということです。

    Firebirdの場合は、後程実際に試しますが、動作としてはIBM Db2やMicrosoft SQL Serverのように、科学的方法を試みている、ように見えます。(Firebird 4.0 on Win10)

    セルコ(Joe Celko)の「プログラマのためのSQL 第四版 日本語版(翻訳: ミックさん)」では以下のように記述されています。

    SQLは丸めについても標準では何も決めていない。プログラミングにおける丸めの方法は、代表的なものが2つある。科学的方法と商業的方法である。
    科学的方法は、いわゆる我々が学校で習う四捨五入である。これは一般に小さな数に向いている。商業的方法は、一風変わっている。端数が1〜4ならば切り捨て、
    6〜9ならば切り上げる。ここまでは科学的方法と変わらないが、違うのは端数が5の場合である。
    商業的方法では、切り捨てと切り上げのうち結果が偶数となるほうへ丸める【訳注10】。

    ミックさんの訳注10は以下のとおり。リンク先は消滅していたので、同等のドキュメントにリンクしなおしました。

    商業的方法は「偶数丸め」とも呼ばれる。丸めの対象桁の数値が5の場合、切り上げられたり切り下げされたりして、結果が常に偶数になる。
    この方式を採用しているソフトウェアとして、Microsoft AccessのROUND関数がある。
    以下のMicrosoft社のドキュメントも参照。

    ●[OFFXP]VBAのRound関数について

    Firebirdでの実行結果は以下のとおり。2.5はすべて四捨五入されて3になっています。

    CREATE TABLE rd_table(c1 numeric(3,1), c2 double precision,c3 float);
    INSERT INTO rd_table VALUES (2.1, 2.1, 2.1);
    INSERT INTO rd_table VALUES (2.2, 2.2, 2.2);
    INSERT INTO rd_table VALUES (2.3, 2.3, 2.3);
    INSERT INTO rd_table VALUES (2.4, 2.4, 2.4);
    INSERT INTO rd_table VALUES (2.5, 2.5, 2.5);
    INSERT INTO rd_table VALUES (2.6, 2.6, 2.6);
    INSERT INTO rd_table VALUES (2.7, 2.7, 2.7);
    INSERT INTO rd_table VALUES (2.8, 2.8, 2.8);
    INSERT INTO rd_table VALUES (2.9, 2.9, 2.9);
    INSERT INTO rd_table VALUES (3.0, 3.0, 3.0);

    select c1, round(c1), round(c2), round(c2,0), round(c3), round(c3,0) from rd_table;

    C1 ROUND ROUND ROUND ROUND ROUND
    ======= ======= ======================= ======================= ============== ==============
    2.1 2 2.000000000000000 2.000000000000000 2.0000000 2.0000000
    2.2 2 2.000000000000000 2.000000000000000 2.0000000 2.0000000
    2.3 2 2.000000000000000 2.000000000000000 2.0000000 2.0000000
    2.4 2 2.000000000000000 2.000000000000000 2.0000000 2.0000000
    2.5 3 3.000000000000000 3.000000000000000 3.0000000 3.0000000
    2.6 3 3.000000000000000 3.000000000000000 3.0000000 3.0000000
    2.7 3 3.000000000000000 3.000000000000000 3.0000000 3.0000000
    2.8 3 3.000000000000000 3.000000000000000 3.0000000 3.0000000
    2.9 3 3.000000000000000 3.000000000000000 3.0000000 3.0000000
    3.0 3 3.000000000000000 3.000000000000000 3.0000000 3.0000000

    JUGEMテーマ:コンピュータ



    | meijik | Firebird/InterBase | 17:32 | comments(0) | trackbacks(0) | - | - |









    トラックバック機能は終了しました。
     123456
    78910111213
    14151617181920
    21222324252627
    282930    
    << June 2020 >>
    + RECOMMEND
    100人のプロが選んだソフトウェア開発の名著 君のために選んだ1冊
    100人のプロが選んだソフトウェア開発の名著 君のために選んだ1冊 (JUGEMレビュー »)

    100人のうちの一人としてミックさんの本を推薦しています。
    + RECOMMEND
    MySQL 5.1 Plugin Development
    MySQL 5.1 Plugin Development (JUGEMレビュー »)
    Andrew Hutchings,Sergei Golubchik
    MySQL 5.1 のプラグインを作るならこれ!
    + RECOMMEND
    AWKを256倍使うための本 (Ascii 256倍)
    AWKを256倍使うための本 (Ascii 256倍) (JUGEMレビュー »)
    志村 拓,鷲北 賢,西村 克信
    ここにきてまさかの復刊。15〜16年前の本ですが、いまでも十分役立ちますよ!!
    + RECOMMEND
    Linux-DB システム構築/運用入門 (DB Magazine SELECTION)
    Linux-DB システム構築/運用入門 (DB Magazine SELECTION) (JUGEMレビュー »)
    松信 嘉範
    Linux-DB システム構築の新スタンダード。DB Magazine人気連載、待望の書籍化です!!
    + RECOMMEND
    + RECOMMEND
    超・極める!MySQL
    超・極める!MySQL (JUGEMレビュー »)
    坂井 恵,志村 和彦,ひろせ まさあき,松信 嘉範
    内容は少々古くなりましたが、内部説明があり、いろいろ面白いです。
    + RECOMMEND
    The Root of .NET Framework
    The Root of .NET Framework (JUGEMレビュー »)
    荒井 省三
    .NETの根っこをつかむ、か?
    + RECOMMEND
    エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド
    エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド (JUGEMレビュー »)
    奥野 幹也
    これまでにない構築、そして構築後のMySQLのための本。
    + RECOMMEND
    Database Management Systems
    Database Management Systems (JUGEMレビュー »)
    Raghu Ramakrishnan,Johannes Gehrke
    ミックさん連載の参考書籍です。
    + RECOMMEND
    Advanced Programming in the UNIX Environment: Paperback Edition (2nd Edition) (Addison-Wesley Professional Computing Series)
    Advanced Programming in the UNIX Environment: Paperback Edition (2nd Edition) (Addison-Wesley Professional Computing Series) (JUGEMレビュー »)
    W. Richard Stevens,Stephen A. Rago
    必読! といいつつ私が読んだのは初版の日本語訳です。差分はチェックしないといけませんね。
    + RECOMMEND
    + RECOMMEND
    + RECOMMEND
    Western Digital Scorpio Blue 2.5inch 5400rpm 320GB 8MB PATA WD3200BEVE
    Western Digital Scorpio Blue 2.5inch 5400rpm 320GB 8MB PATA WD3200BEVE (JUGEMレビュー »)

    DELL SX260の換装用に購入。今はコチラのほうが安いですね。
    + RECOMMEND
    情熱プログラマー ソフトウェア開発者の幸せな生き方
    情熱プログラマー ソフトウェア開発者の幸せな生き方 (JUGEMレビュー »)
    Chad Fowler
    OSC2010神戸に出展されたジュンク堂で買いました。
    + RECOMMEND
    Software Design 総集編 【2000~2009】(DVD付)
    Software Design 総集編 【2000~2009】(DVD付) (JUGEMレビュー »)

    メガトン級の過去記事。売り切れる前にお店に急げ!
    + RECOMMEND
    + RECOMMEND
    玄人志向 2.5型HDDケース SATA対応USB2.0接続 GW2.5AI-SU2
    玄人志向 2.5型HDDケース SATA対応USB2.0接続 GW2.5AI-SU2 (JUGEMレビュー »)

    Aspire 1410 HDD換装後、昔のHDDはこれにいれます。
    + RECOMMEND
    + RECOMMEND
    acer Aspire Timeline AS1410 11.6型ノートPC Windows7搭載 250GB ブラック AS1410-KK22
    acer Aspire Timeline AS1410 11.6型ノートPC Windows7搭載 250GB ブラック AS1410-KK22 (JUGEMレビュー »)

    色違い黒(他に青と白があります): メモリは最大4GBとあるが、がんばれば8GBいけるらしい。
    + RECOMMEND
    Firebird 徹底入門
    Firebird 徹底入門 (JUGEMレビュー »)
    木村 明治,はやし つとむ,坂井 恵
    Firebird日本ユーザ会のはやしさん、そしてMyNAから拝借(?) してきた坂井さんとともに書きました。まだ誰も知らないFirebird 2.5や、いままでドキュメントのなかったツール類についてもソースを確認してとりあげた本です。是非ご活用ください。
    + SELECTED ENTRIES
    + RECENT COMMENTS
    • たまたま「プリントヘッドの種類が違います」エラーから復活@MG6230
      meijik (11/20)
    • [ミュージシャンに聴かせたい・弾かせたい!] (4) 山田元気様
      meijik (07/27)
    • 毎月日経SYSTEMSが届くたびに?が増え続ける: 日経SYSTEMSのコラム「ITアーキテクチャーの真髄」と「第7正規化」
      meijik (03/03)
    • 2019年の木村明治
      田中尚 (01/08)
    • 使い慣れたSQLに潜む実装依存: Firebirdの場合(6) 文字列との結合演算子
      noname (12/10)
    • 毎月日経SYSTEMSが届くたびに?が増え続ける: 日経SYSTEMSのコラム「ITアーキテクチャーの真髄」と「第7正規化」
      Moriaki_ (01/05)
    • 毎月日経SYSTEMSが届くたびに?が増え続ける: 日経SYSTEMSのコラム「ITアーキテクチャーの真髄」と「第7正規化」
      Moriaki_ (01/05)
    • 2015年版 InterBaseの歩み
      nakagami (12/06)
    • 毎月日経SYSTEMSが届くたびに?が増え続ける: 日経SYSTEMSのコラム「ITアーキテクチャーの真髄」と「第7正規化」
      meijik (11/22)
    • 分散DB本読書会第46回メモ「STOP AFTER 10」
      masudahidehiko (09/01)
    + RECENT TRACKBACK
    + CATEGORIES
    + ARCHIVES
    + MOBILE
    qrcode
    + LINKS
    + PROFILE