2007年03月01日 18:45 [Edit]
53/100*100 =
とりあえず手元にあるもので。言語はアルファベット順。インタラクティブ環境があるものはインタラクティブに。
awk
% echo | awk '{print 53/100*100}'
53
bc
% bc bc 1.06 Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 53/100*100 0 53.0/100*100 0 53*100/100 53
haskell
% ghci ___ ___ _ / _ \ /\ /\/ __(_) / /_\// /_/ / / | | GHC Interactive, version 6.6, for Haskell 98. / /_\\/ __ / /___| | http://www.haskell.org/ghc/ \____/\/ /_/\____/|_| Type :? for help. Loading package base ... linking ... done. Prelude> 53/100*100 53.0
JavaScript
フィールドをクリックして実行。alert(53/100*100); // 53
perl
% perl -de 1 Loading DB routines from perl5db.pl version 1.28 Editor support available. Enter h or `h h' for help, or `man perldebug' for more help. main::(-e:1): 1 DB<1> p 53/100*100 53
python
% python Python 2.3.5 (#1, Jan 13 2006, 20:13:11) [GCC 4.0.1 (Apple Computer, Inc. build 5250)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> 53/100*100 0 >>> 53.0/100*100 53.0
R
> 53/100*100 [1] 53
ruby
% irb irb(main):001:0> 53/100*100 => 0 irb(main):002:0> 53.0/100*100 => 53.0
scheme (gauche)
% gosh gosh> (* (/ 53 100) 100) 53.0
他にもあればこちらまでTBないしcommentを。
Dan the Man with Too Many Floating-Point Numbers to Process
Posted by dankogai at 18:45│Comments(9)│TrackBack(1)
この記事へのトラックバックURL
この記事へのトラックバック
浮動小数点演算結果を整数に丸めると直感に反する結果が出るという高林さんの考察と、
53.0 / 100 * 100 = ? in LabVIEW【Even More Addicted to Indentation】at 2007年03月02日 20:31
この記事へのコメント
タイトルが間違ってるような気が...
誤) 53*100/100 =
正) 53/100*100 =
誤) 53*100/100 =
正) 53/100*100 =
Posted by heiwa4126 at 2007年03月01日 19:00
heiwa4126さん、
ありがとうございます。修正しました。
Dan the Out-of-order Evaluator
ありがとうございます。修正しました。
Dan the Out-of-order Evaluator
Posted by 弾 at 2007年03月01日 19:06
;; scheme (gauche)
(* (/ 53 100) 100) ;=> 53.0
;; Common Lisp (clisp)
(* (/ 53 100) 100) ;=> 53
;; Emacs Lisp (Meadow)
(* (/ 53 100) 100) ;=> 0
そりゃそうだ
(* (/ 53 100) 100) ;=> 53.0
;; Common Lisp (clisp)
(* (/ 53 100) 100) ;=> 53
;; Emacs Lisp (Meadow)
(* (/ 53 100) 100) ;=> 0
そりゃそうだ
Posted by りすふ at 2007年03月01日 20:25
Gauche は 0.8.8 から整数同士の割り算で有理数を返すようになりましたよ。
gosh> (* (/ 100 53) 53)
100
gosh> (* (/ 100 53) 53)
100
Posted by Black at 2007年03月01日 21:21
なでしこでやってみました.
ソース:
53/100*100を表示.
答え: 53
という結果になりました.
ちなみになでしこのバージョンは「1.3992」です.
ソース:
53/100*100を表示.
答え: 53
という結果になりました.
ちなみになでしこのバージョンは「1.3992」です.
Posted by 桐生哲史 at 2007年03月01日 21:33
PHP:
> phpcli -r "{print 53/100*100;}"
> 53
(phpcli はコマンドライン版 php へのエイリアス)
gnuplot:
> print 53.0/100.0*100.0
> 53.0
(すべて整数で書くと 0,1つでも小数表記にすると53.0)
> phpcli -r "{print 53/100*100;}"
> 53
(phpcli はコマンドライン版 php へのエイリアス)
gnuplot:
> print 53.0/100.0*100.0
> 53.0
(すべて整数で書くと 0,1つでも小数表記にすると53.0)
Posted by RET at 2007年03月01日 22:17
言語なのかバックエンド確認なのかよく判りませんが。
Google
http://www.google.com/search?q=53/100*100
http://www.google.com/search?q=53/100*100
Posted by skim at 2007年03月02日 01:57
うーん、このテストは2重の意味でピントを外しているように思いました。0.53で問題が出るのは「80bit拡張浮動小数点数表現から直接floorを取った場合」というのが元記事ですよね。
(1)LL言語ではほとんどの場合計算結果をいちいちdoubleにして保持するだろうから、元記事にあるように丸めがおきて誤差は観測されない
(2)処理系が拡張浮動小数点数そのままで値を保持していたとしても、print時の丸めによって"53.0"と表示されてしまう可能性が高い。
もし処理系内部での精度について問題にしたいのであれば、少なくとも結果を表示させるのではなくリテラルの53.0と比較する、といった配慮が必要かと。
(1)LL言語ではほとんどの場合計算結果をいちいちdoubleにして保持するだろうから、元記事にあるように丸めがおきて誤差は観測されない
(2)処理系が拡張浮動小数点数そのままで値を保持していたとしても、print時の丸めによって"53.0"と表示されてしまう可能性が高い。
もし処理系内部での精度について問題にしたいのであれば、少なくとも結果を表示させるのではなくリテラルの53.0と比較する、といった配慮が必要かと。
Posted by shiro at 2007年03月02日 06:25
まさに便乗バッドラッパー記事
Posted by a at 2007年03月02日 19:39