トップページ⇒tech
862コメント274KB

浮動小数

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
っていらないでしょ。

固定小数マンセー
0002デフォルトの名無しさんNGNG
終了
0003デフォルトの名無しさんNGNG
少しは懲りろ!   ./ \ \  / ̄ ̄ ̄ ̄ ̄ ̄
       ∧_∧/     ̄  < また貴様か!
      (;´Д`)     i i i    \______
      /    ヽ _   i i i--、
     ./| |   | |   ̄ ̄ ̄ |:::::|.
    / \ヽ/| |       ノ__ノ..
   /   \\| |
   / /⌒\ し(メ    .i i i . .
 / /    > ) \  ノノノ
/ /     / /    .\_  ザックザック
し'     (_つ   /:::::/::...   /ヽ
          ; "ノ・ ./∴: / )i iヽ-、_へ    ,ヘ
          '',, : :―― / / i i i iヽ . ̄ ゙― ノ /
    n_    _/;    i  .ノ / /ノ-' ̄ ゙ ― 、__ノ
  _ノ 二二二、_( _Д_ ;)-ヽ_ノ-'>>1
  ゙ー ''~      ∨ ̄∨
0004デフォルトの名無しさんNGNG
いつも小数点の位置は固定だけど?

円周率は 0.314159265 E+1

0の次にしか小数点はこない。
0005デフォルトの名無しさんNGNG
intが64bitになれば、ますます固定小数点演算の需要は増えるね。
0006デフォルトの名無しさんNGNG
                \ │ /
                 / ̄\   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
               ─( ゚ ∀ ゚ )< 2/22(土) 16時と21時
                 \_/   \_________  
                / │ \
                    ∩ ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< 梅田マルビルの電光掲示板に…
 『キタ━(゚∀゚)━!!!!』 >( ゚∀゚ )/ |    / \__________
________/ |    〈 |   |
              / /\_」 / /\」
               ̄     / /
                    ̄
詳細はココ→ http://life2.2ch.net/test/read.cgi/offreg/1044221627/l50
0007デフォルトの名無しさんNGNG

「このまま一生彼女ができないのでは…」

 私は社会学を専攻している者です。社会学や周辺の学問を利用し、実践的な
恋愛理論を開発しております。机上の空論に終わらず、あくまで実践的。効果
は絶大です。この理論は私自身の苦悩から生まれました。モテないことに深く
悩んでいた私は社会学部に入り、恋愛をはじめとするコミュニケーションにつ
いて考察することを決意。開発期間およそ6年。やっと研究が実を結びました。
ルックスなんて恋愛に関係ないということを自ら証明したのです。今回はその
集大成を公開しようと、メールマガジン発行を決めました。すでに数回発行し
ておりますが、購読者にはバックナンバーが閲覧できますのでご安心を!

 今ならまだ間に合います。春、出会いの季節に幸せが訪れるかどうかは、あな
たの選択次第です。絶対に後悔はさせません。「90日彼女ゲットプログラム」
もちろん購読は無料! → → http://www.h5.dion.ne.jp/~psysys/index.html
0008デフォルトの名無しさんNGNG
http://sagatoku.fc2web.com/
あなたの探し物こちらで見つかります
0009デフォルトの名無しさんNGNG
なんか最近糞スレ多くねぇか?
0010デフォルトの名無しさんNGNG
固定小数なら0.00000000000000000000000000000000000000000000000000000000128とかどう(ry
0011デフォルトの名無しさんNGNG
0012デフォルトの名無しさんNGNG
>>5
long使わない理由は?
0013デフォルトの名無しさんNGNG
山の浮動小数点???
ってなんか北斗の拳におったな
0014デフォルトの名無しさんNGNG
>>5
それってC++のint?
0015デフォルトの名無しさんNGNG
>>12
intが64bit -> 64bit cpu
ってことでしょ。
0016デフォルトの名無しさんNGNG
浮動小数点って誤差あるのに用途あるの?
0017デフォルトの名無しさんNGNG
あらゆる計測機器は誤差があるけど用途もあります。
0018デフォルトの名無しさんNGNG
>>16
科学技術計算には使えるぞ。
0019デフォルトの名無しさんNGNG
>>16
誤差の無い測量がこのよにあるとでも思ったか?
誤差を確実にこの世から無くせた奴は神
0020デフォルトの名無しさんNGNG
>>15
古い31bitsマシンとの互換性はどうなる?
0021デフォルトの名無しさんNGNG
それを言うならlong longを使ったほうがいいと思うけど
0022デフォルトの名無しさんNGNG
いくら古くったって、wordサイズが素数のCPUとかってあったのか?
0023デフォルトの名無しさんNGNG
>>5の言いたいことがよく理解できない。
だれか解説できる?
0024デフォルトの名無しさんNGNG
sizeof(double) == sizeof(int)
0025デフォルトの名無しさんNGNG
>>16
あのなあ、固定小数点だろうと
その数が平方などによって得られたものなら
無理数になるものも丸めて無理やりむりやり有理数
した誤差を持った値なんだぞ。
0026デフォルトの名無しさんNGNG
金融では良く使うね>固定小数
0027デフォルトの名無しさんNGNG
>>26
お金の勘定では少数が出ても金にするときは端数切捨てか
なにかですからねぇ。
桁数も限られて
もう、ほとんど気にしなくていいというか。

物理の世界では考えられないことですね。
0028デフォルトの名無しさんNGNG
ちょっとひろいかもw(^_^;)
0029デフォルトの名無しさんNGNG
>>25
あの〜。勝手に誤差が出るのと人為的に端数処理するのでは全然違いますよ。
0030デフォルトの名無しさんNGNG
とりあえずCPU486以上つかっとけ
0031デフォルトの名無しさんNGNG
不動小数とは主に実数をコンピュータ上で表すための形式で
指数表記の小数点の位置が常に一定の場所であることからこう呼ばれています。
0032デフォルトの名無しさんNGNG
俺はどちらかというと不動明神のほうが。
0033デフォルトの名無しさんNGNG
不動明はデビルマン
0034デフォルトの名無しさんNGNG
犬神明はウルフガイ
0035デフォルトの名無しさんNGNG
>指数表記の小数点の位置が常に一定の場所であることからこう呼ばれています。

そのような小数点を不動点と呼びます。
0036デフォルトの名無しさんNGNG
各寺に2人づつしかいませんってか?
0037デフォルトの名無しさんNGNG
>>29
あの〜。桁数の有限なコンピュータで無理数を表現する以上
端数処理は避けられませんよ。
0038デフォルトの名無しさんNGNG
>>37
どこに端数処理が避けられるって書いてあるって?
文章ちゃんと読めよ(藁
0039デフォルトの名無しさんNGNG
Floating Point Exception age!
0040デフォルトの名無しさんNGNG
小数を2進のコンピュータでやらすのは酷
0041デフォルトの名無しさんNGNG
>>39
  ∧_∧
 ( ´∀`)<ふろぽ
0042デフォルトの名無しさんNGNG
浮動小数っていまいち分からないんだよな。
いや、基本的な構造くらいはもちろん押さえてるんだが。

これを読めば浮動小数の神になれるみたいな本はないのか。
0043デフォルトの名無しさんNGNG
仕様嫁
0044デフォルトの名無しさんNGNG
イチオウシマツシテオクカ
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >.__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>41
0045デフォルトの名無しさんNGNG
おまえら浮動少数が死滅寸前に追い込まれたときどうするよ?

ちゃんと対策とってるかよ
死滅対策をよ
死滅後の行動とってるかよ
0046デフォルトの名無しさんNGNG
浮動小数って死滅するの?
0047デフォルトの名無しさん NGNG
 浮動拳の使い手ですが、文句ある?
0048デフォルトの名無しさんNGNG
おまえら45が死滅寸前に追い込まれたときどうするよ?

ちゃんと対策とってるかよ
死滅対策をよ
死滅後の行動とってるかよ




別に放っておいてもいいか
0049デフォルトの名無しさんNGNG
>>46
コンピュータのスペックがさらに増大し
高精度の長桁計算の需要が高まれば
10進可変長固定少数が普及すれば死滅する。
マジで
0050デフォルトの名無しさんNGNG
>>49
1950年代から60年代に作られた初期の計算機は、ほとんどが10進でした。
二進など歯牙にもかけられないほどでした。
そのときにも、科学技術計算や一般の計算にも十進は必須だと思われ、
計算機の性能が上がれば、二進などは消えてなくなると言われていました。
しかし、70年代後半になり、計算機の性能が向上して消えたのは十進の方でした。
それから20年以上も二進の時代が続いたわけですが、
じつはそろそろ三進数の時代になったりしちゃったりして。
そして大論争が勃発、規格戦争に発展、二進も三進もいかなくなるという・・・
0051デフォルトの名無しさんNGNG
>>50
三振方は電流の向きを解読できる方法を知らないことにはのう。

ま、コンピュータは二進でいい。ソフトウェアだけで10進演算を実現するのじゃ。
これからはソフトウェア10進の時代じゃ。

ところでニッチとサッチってニシンさんしんからきたの?
0052デフォルトの名無しさんNGNG
3Dゲームの世界ではまず単精度から倍精度にするのが先だろうな。
0053デフォルトの名無しさんNGNG
3Dゲームの世界じゃ固定小数が多いと思うぞ。
0054デフォルトの名無しさんNGNG
>>53
おいおい、ここは時代が5年ズレてるスレじゃないぞ。
0055デフォルトの名無しさんNGNG
MMX 世代なら固定小数だろうけど、SSE 世代なら浮動小数点を使うような。
DX9 で 16bit 浮動小数点が導入される辺りからしても固定小数点は下火になっているかと。
0056デフォルトの名無しさんNGNG
>DX9 で 16bit 浮動小数点が導入される

それはピクセルフォーマットの話ちゃうのん。
座標系は大昔から浮動小数であろう。
0057デフォルトの名無しさんNGNG
金融系で浮動小数点はご法度です。
0058デフォルトの名無しさんNGNG
整数論でも浮動小数点どころか固定小数点もご法度です。
0059デフォルトの名無しさんNGNG
固定小数点はすでに死語
0060デフォルトの名無しさんNGNG
浮動小数点は死滅
0061デフォルトの名無しさんNGNG
>>60
そういってるお前には制御系の仕事も
信号処理系の仕事も科学技術計算系の仕事も回って来まい
0062デフォルトの名無しさんNGNG
What Every Computer Scientist Should Know About Floating-Point Arithmetic
http://docs.sun.com/source/806-3568/ncg_goldberg.html
0063デフォルトの名無しさんNGNG
物理屋なら浮動小数点知っていなければおかしいだろ
0064デフォルトの名無しさんNGNG
double percomp,file_complete;
int totalfiles,numfiles,totalfiles;

percomp = ((double)(totalfiles - numfiles) + 1 - (1 - file_complete)) / (double)totalfiles;
〜
"ERROR: float invalid operations."
0065デフォルトの名無しさんNGNG
>>63
ということは物理の教科書とかにも載ってるんだ。大学でも習うの?教養課程以外で?
0066山崎渉NGNG
(^^)
0067山崎渉NGNG
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
0068デフォルトの名無しさんNGNG
>>65
当たり前だろ。
いまどきコンピュータ無しで測定結果を処理したがる時代かっちゅ〜の。
数値計算を教われば習って当然よ。
実験してる奴は殆ど使って当たり前だろ。

天文学者はもっと膨大な桁を扱う以上、浮動小数点は避けては通れなくて当然

0069山崎渉NGNG
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
0070デフォルトの名無しさんNGNG
浮動小数点って誤差あるのに用途あるの?
0071デフォルトの名無しさんNGNG
>>70
それは「計測器って測定誤差あるのに用途あるの?」という質問と同じだ。
誤差の評価も出来ない奴に科学技術計算のプログラムは書けん。てゆうか書くな。
0072デフォルトの名無しさんNGNG
>>70
> 浮動小数点って誤差あるのに用途あるの?
↑ヴァカ発見
0073デフォルトの名無しさんNGNG
>>70
ケーキ切り分けた後で重さまで比べる香具師発見
0074デフォルトの名無しさんNGNG
合計1兆円なら1マソ円くらい誤差くらい許せよ >経理屋
経理屋は細かくていかんわなぁ。
0075デフォルトの名無しさんNGNG
>>74
おいおい、それはいかんだろ。
トラブルのもとだぞ。裁判になる。 
0076デフォルトの名無しさんNGNG
>>70は数値計算や物理をもう一回一から勉強しなおした方がいいね。
自然界に存在する誤差を知らないアホは。
自然界に存在するものをコンピュータで再現すりゃそりゃ誤差がでるだろが。

>>70は自然現象をなめとんのか。
神に逆らっているようなもんだぞ
0077デフォルトの名無しさんNGNG
>>76
計測誤差と浮動小数点の丸め誤差を一緒にするなよ
0078デフォルトの名無しさんNGNG
10進2進変換誤差と浮動小数点誤差を一緒にするなよ
0079デフォルトの名無しさんNGNG
ゴザとムシロを一緒にすんなよ
0080デフォルトの名無しさんNGNG
>>57
そうか?金銭型ってのは使わないの?
0081デフォルトの名無しさんNGNG
金融関係ではどんぶり型を使って計算します。
0082山崎 渉NGNG

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
0083山崎 渉NGNG

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
0084山崎 渉NGNG
(^^)
0085デフォルトの名無しさんNGNG
>>80
多分10進型を使いこなしているCOBOLerだと思う。
0086デフォルトの名無しさんNGNG
何で2ヶ月前のレスに上げてレスするのか?

多分2chを使いこなしてないリア厨だと思う。
0087デフォルトの名無しさんNGNG
javaでbigdecimalクラスを使うのと
普通のintを使うのとで
一体何が違うのか教えてくれー。
0088デフォルトの名無しさんNGNG
>>87
ところでおまえさんよ、BigIntegerとdoubleはしっとるよな。

ドキュメント見ればああなるほどと一発でわかるのだが。
桁数が可変になってdouble型以上の高精度、多倍長計算ができる
程度の違いだよ。BigDecimalは内部で10進数で値を
保持しているようだから計算はdolubleより遅くなるがね。
しかも三角関数などの初頭関数が用意されていない。
自作するか誰かが作ったライブラリをとってきて使うしかない。
double型の制度内に収まる値なら一旦doubleに変換して計算が終わったら
BigDecimalに戻すという手法もあり。
0089デフォルトの名無しさんNGNG
単精度値全体を見渡すと、250個のうち1個はNaN値なんだよな。もったいない話だ。
せっかくだからNaN値の面白い使い方でも教えてくれや。

※ むかつくCGIにシグナリングNaNを入力してアボートさせるなんてのはナシよ。
0090デフォルトの名無しさんNGNG
整数型三角関数
http://www.gen-ta.net/underwater/
0091デフォルトの名無しさんNGNG
>>89
0÷0はNaNです。
0092デフォルトの名無しさんNGNG
文系出身のオレにはこの辺はチンプンカンプンだ。。。
0093デフォルトの名無しさんNGNG
理系出身のオレにもチンプンカンプンだ。。。
0094デフォルトの名無しさんNGNG
>>89
NaN==NaN はfalseです。
0095デフォルトの名無しさんNGNG
>>90
オレにも出来た。整数型三角関数。
int intsin(int x){
 return (int)sin((double)x);
}
0096デフォルトの名無しさんNGNG
これでいいんじゃないか?
#define intsin( 0*(
0097デフォルトの名無しさんNGNG
-1〜1の範囲から出られない三角関数なんぞ俺の人生には不要だ。
0098デフォルトの名無しさんNGNG
>97
tan, cot,sec,cosec しか使わないということですか。
0099デフォルトの名無しさんNGNG
>>98
しか?
0100デフォルトの名無しさんNGNG
浮動小数点が扱えない(整数型のみ)システムで、
浮動小数点を計算したい場合はどうやるのでつか?
0101デフォルトの名無しさんNGNG
>100
浮動小数点演算ライブラリをリンクする。
0102デフォルトの名無しさんNGNG
昔はZ80用浮動小数点ライブラリなんてのもあったな。
0103デフォルトの名無しさんNGNG
>>89
なんじゃそりゃ。ぱっと見ただけではまったく意味がわからなかったぞ。
ちゃんと説明せいや。
32bits表現可能な値のうち250分の1
( 0x7f800001 〜 0x7fffffff, 0xff800001 〜 0xffffffff)はNaNで表現されるとい
解説をいれてくれや。

メモリもマシンパフォーマンスも向上した時代に
いまどきそんなもんを有効利用しようとしてどうする。
0104デフォルトの名無しさんNGNG
>>100
素人が考えた手法です。この手法は、0除算対策には対応していません。

数値を表すクラスを継承した分数クラスを定義する。
privateなフィールド(属性)には整数配列型分母フィールド、整数配列型分子フィールド
を定義する。

コンストラクタは、 分数(long 分子, long 分母)とし、
内部ではこの整数型の数値の一桁一桁の数字を
分割し桁数と同じ長さの整数型配列の中に入れる。

long型で返すget分母(), get分子()メソッドを定義する。

そのクラスに四則演算としてadd(), subtract(), multiply(), divide()メソッド(操作)を用意する。
それぞれのメソッドの戻り値の型は「分数クラス」のスーパークラスである「数値」クラス。
それぞれのメソッドの戻り値は、約分できる値ならできる限り約分された結果をかえす。

割り算など、divide()メソッド内では、
約分などの正規化で割り切れる値以外は実際には割らない。
内部ではあくまで分数で値を保持する。

たとえば、ある分数クラスの二つのオブジェクト(x, y)の中身が a/b、Y c/d であるとき、

数値 x = new 分数(a, b); z = x.divide(y) と計算すると
Z.get分母()で得た値は b * c
Z.get分子()で得た値は a * d となる。

また、数値を文字列表現で返すtoString()メソッドを定義する。
このメソッド内で割り算のアルゴリズムが発動し、
小数点の文字列表現を返す。
0105デフォルトの名無しさんNGNG
>>100
浮動小数点の扱えるシステムを繋ぐ
0106デフォルトの名無しさんNGNG
どうしてスレタイに誰もつっこんでないんだよー。
浮動小数じゃなくて浮動小数点数だろー。
0107デフォルトの名無しさんNGNG
a = x/y + z / w

となる式でaを使った式を計算するとき、どうしても誤差を最小限にしたいとき

自動的に ( x * w + y * z ) y * w と通分してくれるフレームワークが欲しい。

b = x / y;
c = b * y;
という式があったとき、とんでもない誤差を減らすために自動的にyを消去し、
c = x と代入してくれるフレームワークが欲しい。
0108デフォルトの名無しさんNGNG
>>104
なるほどー。なかなかいいね。
加減算でも内部で乗除算が発生するところが少々アレだが。
0109デフォルトの名無しさんNGNG
>107
前者は、データ長を超えないためにわざとそう書く場合も有るから難しいね。
後者は、アルゴリズムを練る時点で解消されている事を祈る。
0110デフォルトの名無しさんNGNG
マジレスすると大きな数はどう表現する?
通分して足し算してると、あっという間に整数型で表現できなくなる。
BigNum使うと、Rationalライブラリになるけど。
0111デフォルトの名無しさんNGNG
>>107
そのくらいだったらコンパイラが対応してない?
……いや、根拠も何もないけどさ。
0112デフォルトの名無しさんNGNG
時計チェック
0113デフォルトの名無しさんNGNG
>>111
念のために言っておくと、そんなことする商用コンパイラは無いよ。
(世界の果てにはあるかもしれないけど。)
あえて切り捨て演算を行いたい場合もあるし。
0114デフォルトの名無しさんNGNG
>>108
あらかじめ通分しとけばいいんじゃない?
ある程度は減るんじゃないかと。
0115デフォルトの名無しさんNGNG
>>107
> b = x / y;
> c = b * y;
> という式があったとき、とんでもない誤差を減らすために自動的にyを消去し、
> c = x と代入してくれるフレームワークが欲しい。

x と y がどっちも 0.0 だったら、c はどうあってほしい?
>>91
でも読んで考えてみてくれ。
y が無限大だった場合もワケワカメなことになりそうだ。
0116デフォルトの名無しさんNGNG
>>114
そうか。104と107にはそういう関連が有ったのか。納得。
速度はさておき。
内部では倍長で扱えば、破綻の無いシステムになりそう。
0117デフォルトの名無しさんNGNG
スマンが最も自分が得意とするJavaで差せてもらいますわい
これまた思いつきですわい

>>110
Javaの java.lang.BigInteger のように配列で値を保持するか.
文字列で値を保持するか...

BigIntegerは10進で最大20憶桁ほど扱えるらしい。
が、桁数が大きくなればなるほどとんでもない計算量になりそうだ。


>>115

そういうときはNaNが発生したとき(Double.isNaN(x)がtrueのとき)
その場で

throw new ArithmeticException(); .....
都合に合わせてtry-catchで料理。
0118デフォルトの名無しさんNGNG
>>104
>
> long型で返すget分母(), get分子()メソッドを定義する。
これもtoString()のようにString()で返すか
java.lang.BigIntegerで返すんだった。longは御法度。
0119デフォルトの名無しさんNGNG
>>117
分子/分母の形式で表現されたその数を10進数で表示/印刷するには
どうすればいいですか?
0120デフォルトの名無しさんNGNG
数式処理システム使えば?
mathematica, maple など
0121デフォルトの名無しさんNGNG
>>119
一番単純なのはこんなやつ。
とりあえず分子、分母の型はこう変更しておこう。
import java.math.BigInteger;も忘れずにつける。

 private BigInteger 分子;
 private BigInteger 分母;

 String show(){
  return this.分子.toString() + " / " + this.分母.toString();
 }

ほんとうはtoString()の仕様をこうすべきかな。
で、以前に定義したtoString()の仕様はこれにし、
名前もtoBigDecimalに変更しよう。

 BigDecimal toBigDecimal(int scale, int roundingMode){
  return new BigDecimal(分子).divide(new BigDecimal(分母), scale, roundingMode);  
 }
0122121NGNG
>>119
よくみたら勘違いしていた。
上で定義したtoBigDecimal()を使って

数値 x = new 分数(BigInteger.valueOf(2), BigInteger.valueOf(3))

System.out.println(
 x.toBigDecimal(1000, BigDecimal.ROUND_HALF_EVEN).toString()
);

多分、0.666666666666666... (6が千個)
という文字列が返ってくるだろう。

こんなメソッドを定義してもいいが無理して作らなくていいかもしれない。
public String dividedValue(int scale, int roundingMode){
 return toBigDecimal(scale, roundingMode).toString();
}
0123デフォルトの名無しさんNGNG
このスレは有理数(分数)クラスを語るスレとなりました。
>100
からずいぶん遠いところまで来てしまったな。

ところでπや三角関数などの無理数はどうやってあらわす?
この勢いで無限級数クラスまで突き進んでくれ。

※ 物理屋がオブジェクト指向に出会うと、たいがい複素数クラスとか考えるよな。
0124デフォルトの名無しさんNGNG
>>123
> ところでπや三角関数などの無理数はどうやってあらわす?
> この勢いで無限級数クラスまで突き進んでくれ。
パイには多倍長型対応arctan()などを作るのだよ。

コンストラクタに桁数、機械epsilonなどの精度を指定するのだ。

> ※ 物理屋がオブジェクト指向に出会うと、たいがい複素数クラスとか考えるよな。

もちろん複素数クラス、行列クラス、数値積分クラス、数値微分クラスくらいは
すでに他の言語で存在してる。しかしオブジェクト指向に弱いライブラリの巣窟。

0125デフォルトの名無しさんNGNG
いまひとつ理解できてないんだけど、
無理数は有理数に近似するしか無いんじゃないの?
0126125NGNG
あ、無限級数クラスか・・・失礼しました。
0127125NGNG
無知ついでに言わせてもらうと、
他人の作ったクラスをソースを見ずに使う勇気はありますか?

私はドキュメントの付いた古風な関数の方が安心できるなあ。
0128デフォルトの名無しさんNGNG
無理数は近似でかまわんが、1/3を正確に記述出来るのはいいな。<分数クラス
0129デフォルトの名無しさんNGNG
>>127
プログラムが多くの人によって実際に使われ、テストされれば
ソースを水に使う気になれる。

そうでなくともJUnitでテストプログラムを使ってテストされている
ものならまあ使う気にもなれる。

最初はまずどんなものはテストするものだが。
0130デフォルトの名無しさんNGNG
>>125
無理数は、平方根クラスや、指数クラスで代用できるかも。

public abstract class 無理数 extends 数値 {
}

public final class 平方根 extends 無理数 {
 private BigInteger value;
 /** この部分は private 数値 value; のほうが拡張性が高いかも。

 public 平方根(BigInteger valuie){
  this.value = value;
 }

 public BigDecimal toBigDecimal(int scale, int roundingMode, BigDecimal eps){
  return sqrt(scale, roundingMode, eps, new BigDecimal(value));
 }

 private BigDecimal sqrt(int scale, int roundingMode, BigDecimal eps, BigDecimal value){
  //多倍長平方根のアルゴリズムここに実装
  //奥村晴彦の「C言語による最新アルゴリズム辞典」
  //「Javaによるアルゴリズム辞典」でなんとか作れるでしょ。
 }
}
0131デフォルトの名無しさんNGNG
無理数の定義(一部)はこれでどうよ

//分数クラスを再定義し有理数クラスを作成
public class 有理数 extends 数値 {}
public class 分数 extends 有理数 {}

public final class 指数関数 extends 無理数 {
 private 有理数 base; //基数部
 private 有理数 exponent; //指数部

 public 指数関数(有理数 base, 有理数 exponent){
  this.value = value;
 }

 public BigDecimal toBigDecimal(int scale, int roundingMode, BigDecimal eps){
  return sqrt(scale, roundingMode, eps,
   base.toBigDecimal(), exponent.toBigDecimal() );
 }

 private BigDecimal exp(int scale, int roundingMode, BigDecimal eps,
   BigDecimal base, BigDecimal exponent){
  //多倍長指数関数のアルゴリズムここに実装
 }
}
0132デフォルトの名無しさんNGNG
車輪の再発明もいいけどさ。
ttp://boost.cppll.jp/HEAD/libs/rational/
0133デフォルトの名無しさんNGNG
http://boost.cppll.jp/HEAD/libs/rational/rational.html#Exceptions
>有理数クラスでは、分母がゼロとなることは決してない。(本ライブラリ
>では、NaN や無限大の表現形式としても、分母がゼロになることはない)
>そのため、分母の値が0となる場合には、boost::bad_rational 例外
>(これは、std::domain_error のサブクラスである)をスルーする。

スルーするって変じゃない?
スローじゃないの?
コールスロー
0134デフォルトの名無しさんNGNG
java で定番のRationalクラスってある?
ttp://www.google.com/search?hl=ja&ie=UTF-8&oe=UTF-8&q=java+%22class+Rational%22
0135デフォルトの名無しさんNGNG
>>134
そこからみてみたんだがオブジェクト指向としてはひどいものばかりだ。
アルゴリズムとしてはかなりのものだとは思うが。

http://www.math.technion.ac.il/~rl/java/kaleido/Rational.html
これはメソッドが全て無意味にpackage private担っているところが
痛すぎる。

http://www.daimi.au.dk/dSoegOpt/java/dSoegOpt/Real.html
これはオブジェクトのカプセル化がなされていなさ過ぎる。
インスタンスフィールドをpublicにするなんてひどすぎる。
privateをつけてgetterメソッドをつけるべきなのに、この仕様は
あまりにも危険すぎる。これは設計者がC言語で構造体を使いこ
なしていた名残なのか?

clone()メソッドもオーバーライドされていない。
Cloneableインターフェース、Comparableインターフェースが実装されていない。

greater()やless()なんというメソッドが用意されているのが気になる。
compareTo()メソッドがあれは必要性がないと思うだがちょっとした利便性の
ためにわざわざ作ったのか?

しかもRationalクラスに不変性が保たれていない。
クラスがfinal宣言されていない。setter機能が禁止されていない(フィールドがpublic)。
0136デフォルトの名無しさんNGNG
Java 使いが多そうなんで オブジェクト指向寄りの話題を振ってみるが、
有理数クラスの hashCode() はどう実装したもんでしょうかねぇ。
やはり戻り値は (分子).hashCode() ^ (分母).hashCode() なんてとこでしょうか。
でも 1/3 と 2/6 の hashCode() はどちらも同じ戻り値を返したい気もする。
0137デフォルトの名無しさんNGNG
>>136
オブジェクト指向とはいえこれはオブジェクト指向とは別の異なる知識が
必要そうだ。ソースコードを拝見してみたが不覚にも修行が足りず解読中。

Object
 public native int hashCode();

Boolean
 public int hashCode() {
  return value ? 1231 : 1237;
 }

String
 public int hashCode() {
  int h = hash;
  if (h == 0) {
   int off = offset;
   char val[] = value;
   int len = count;

   for (int i = 0; i < len; i++) {
    h = 31*h + val[off++];
   }
   hash = h;
  }
  return h;
 }

Character
 public int hashCode() {
  return (int)value;
 }
0138デフォルトの名無しさんNGNG
Byte
 public int hashCode() {
  return (int)value;
 }

Short
 public int hashCode() {
  return (int)value;
 }

Integer
 public int hashCode() {
  return value;
 }

Long
 public int hashCode() {
  return (int)(value ^ (value >>> 32));
 }
0139デフォルトの名無しさんNGNG

Float
 public int hashCode() {
  return floatToIntBits(value);
 }

Double
 public int hashCode() {
  long bits = doubleToLongBits(value);
  return (int)(bits ^ (bits >>> 32));
 }

BigInteger
 public int hashCode() {
  int hashCode = 0;

  for (int i=0; i<mag.length; i++)
   hashCode = (int)(31*hashCode + (mag[i] & LONG_MASK));

  return hashCode * signum;
 }

BigDecimal
 public int hashCode() {
  return 31*intVal.hashCode() + scale;
 }

//Object, Boolean, Character, String, Byte, Short, Integer,
//Long, Float, Double, BigInteger のhashcode()を見てみたがほとんどさっぱり。
BigDecimal
0140デフォルトの名無しさんNGNG
>>136
どうせ「既約にする」というメソッドが必要になるから
内部でそれを呼んで既約にした結果に対して
適当にごにょごにょすればいいんちゃうん
0141デフォルトの名無しさんNGNG
hashcode()はequals()メソッドやclone()メソッド、compareTo()メソッドの
オーバーライドで精一杯です。


http://www.gimlay.org/~javafaq/S038.html#S038-05
よんでhashcode()のことをしらべているけど20億種類もの範囲を超える
オブジェクトのパターンをhashcodeで表現するにはどうすればいい?

BigIntegerだけでも、10の20乗種類もの数値パターンを作れてしまうような。
ていうか、漏れがhashcode()の取り扱いに詳しくないだけ?

上のサイト見てると、hashcode()は検索を早くするためだけにあるような。
0142141NGNG
ん? よく見たら
オブジェクト o と p について、o.equals(p) ならば、
o.hashCode() == p.hashCode() でなければなりません。

逆に、o.hashCode() == p.hashCode()
であっても、o.equals(p)とは限りません。

と書いてあった。String型#hashcode()を参考にして作れと?
0143デフォルトの名無しさんNGNG
>>141
HashはHashTableのためだけにあるんちゃうのか?
0144デフォルトの名無しさんNGNG
>>143
> >>141
> HashはHashTableのためだけにあるんちゃうのか?

そのサイトによると
>ハッシュコードはオブジェクトの検索を高速に行うために使われます。

ということらしいよ。

あまりこのハッシュを使った凝ったプログラミングに時間を費やすことは避けたい。
0145デフォルトの名無しさんNGNG
>>144
お前アホだろ。

>ハッシュコードはオブジェクトの検索を高速に行うために使われます。

に書いてある意味もわかってないようだし、

>オブジェクト o と p について、o.equals(p) ならば、
>o.hashCode() == p.hashCode() でなければなりません。
>
>逆に、o.hashCode() == p.hashCode()
>であっても、o.equals(p)とは限りません。

の意味もわかってないようだし。そもそも Hashtable, HashMap とは何かもわかってないみたいだし。
0146デフォルトの名無しさんNGNG
単純にhashcodeの時だけ約分すやいい話じゃないの?
0147146NGNG
hash値の一意性さえ保っておけばいいんだから、
方針次第では約分する必要もない。
0148146NGNG
equalにも影響あるのか
約分と通分の結果はキャッシュしとくとか。
0149デフォルトの名無しさんNGNG
>>136
> でも 1/3 と 2/6 の hashCode() はどちらも同じ戻り値を返したい気もする。
あらかじめ約分されてから代入されることを考慮するなら
2/6も1/3に変わってその問題もどうにか解決すると思われ。
0150デフォルトの名無しさんNGNG
そういや1より大きな数のとりあつかいについてぜんぜん考えてなかった。
0151デフォルトの名無しさんNGNG
約分すると整数になる場合はn/1
でいいんじゃん?

0152山崎 渉NGNG
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
0153デフォルトの名無しさんNGNG
おwari?
0154デフォルトの名無しさんNGNG
いきなり初歩的な質問なんですが、IEEEの浮動小数点形式って、
「ゼロ」に符号があるみたいなんですけど、これって使い分けというか、
両方とも使う必要があるんでしょうか?

それとも、結果的に2つできてしまっただけで、通常は片方を使う
のでしょうか?
0155直リンNGNG
http://homepage.mac.com/maki170001/
0156あぼーんNGNG
あぼーん
0157デフォルトの名無しさんNGNG
1 / +0 => +∞
1 / -0 => -∞
0158デフォルトの名無しさんNGNG
>>145
いやわかってるとも。
それよりHashTableやHashMapはよくつかってるしServletでも使ってるし。
それよりもハッシュを理解してもハッシュ関数のことをよく理解していなかったことは確か。

ひとまず、コンストラクタを生成した時点で約分を開始し、
約分した値は全て最小絶対値となるようにし

hashcode()は分子、分母を割った結果のBigDecimal型のhashcodeをとるということで。

public int hashcode(){
 new BigDecimal(分子).divide(
  new BigDecimal(分母),
   Integer.MAX_VALUE,
   BigDecimal.ROUND_HALF_EVEN
  ).hashcode();
}

しかしこれはInteger.MAX_VALUEが重たいな。
0159デフォルトの名無しさんNGNG
>>158
未だに効果的なハッシュ関数というものについては全然わかってないみたいだな。
0160154NGNG
>>157
おお、なるほど! そういう特別な場合のための意味づけなんですか・・・

通常の数だけを扱う場合は、プラスゼロだけにまとめてしまっても大丈夫?
0161デフォルトの名無しさんNGNG
BigIntegerで最も大きな素数の組み合わせでできた分数をhashCode()に
変換する方法を考えないといけないぞう。約分できる分数は無視。

でかい数は約分するだけでも一苦労。
BigIntegerの最大値の素数の平方を求め、そこから約分できるかどうかを判定する。
とんでもない時間がかかりそうだわい。
0162デフォルトの名無しさんNGNG
約分できるかどうかなんて
当然ユークリッドの互除法を使ってやると思うけど。
そもそも、有理数を分子・分母の組で表す場合、
ユークリッドの互除法使って常に規約にしない?
0163デフォルトの名無しさんNGNG
すこしスレタイ寄りの話題に戻すか。
>>100
>浮動小数点が扱えない(整数型のみ)システムで、
>浮動小数点を計算したい場合はどうやるのでつか?

パフォーマンスを無視すれば、厨学生でもIEEE規格の加減乗除ぐらい
アセンブラの整数命令程度の道具で作れるでしょ。乗算が一番簡単だったりしてね。
MIDP でケータイアプリなんか作ってるとこはこの辺どうしてるのかねぇ。

この辺のライブラリを仕事で作ったことのあるプログラマはいる?
やはり十年前のバグ付きペンティアムみたいに、巨大なテーブル引いて
高速除算したりするのかしら。

残りの超越関数は ttp://www.ibiblio.org/pub/packages/development/libraries/ の
fdlibm のソースとか役に立つでしょう。JDK もこれ使ってるらしい。
0164デフォルトの名無しさんNGNG
>>162
しかし、巨大な素数がある場合、それが計算速度の弊害になるて。
巨大な素数を求めるだけでも時間がかかる。
あらかじめ素数リストをtable lookupしてしまえばいいのだが。
0165デフォルトの名無しさんNGNG
>>164
ユークリッドの互除法についてわかってないなら発言しない方がいいよ。
0166デフォルトの名無しさんNGNG
オブジェクト指向上、上のように「有理数」が「数値」を継承するって、どうよ?
いや、数学的に、集合的に、正論だってことは解るけどさ、
ただ Java で java.lang.Number をインプリメントしたいだけっていうんなら文句はないけどさ、
なんかね、「円」が「楕円」を継承しているような気味悪さがあるのよ。

※ 他にも「指数関数」が「無理数」を継承するとかあったけど、これは見なかったことにしよう。
0167デフォルトの名無しさんNGNG
>>165
ハゲ! 貴様がわかっていないのだろうが!
0168デフォルトの名無しさんNGNG
>>165
お前はユークリッドの互除法を使う前の段階の素数を短時間で求める方法を
わかってないみたいだからそれ以上発言しないほうがいいよ。
0169デフォルトの名無しさんNGNG
俺の知ってるユークリッドの互除法は素数を必要としないのだが、
お前の知っているユークリッドの互除法とは別物らしい。
説明してもらえないか。
0170デフォルトの名無しさんNGNG
>>169
生意気な。
素数を使わずに順次にインクリメントしてやっていられるかっての。
高速化を考えろっての
0171デフォルトの名無しさんNGNG
何だ釣りか。
黙ってろ、ちんかす。
0172デフォルトの名無しさんNGNG
>>169はループを21億回転させるつもりらしい。
0173デフォルトの名無しさんNGNG
hashCodeも考える必要なし
0174デフォルトの名無しさんNGNG
では二人にそれぞれの方法で分数
798 / 5005
を既約化することを命ず。
決着が付かなければ数学版でプリーズ。
0175デフォルトの名無しさんNGNG
>>170,172
http://www2.cc.niigata-u.ac.jp/~takeuchi/tbasic/BackGround/Euclid.html
釣られてみた
0176デフォルトの名無しさんNGNG
もしかして、ユークリッドの互除法と、エラトステネスのふるいを
混同している人がいたりするのではあるまいか?
0177デフォルトの名無しさんNGNG
>>172
知らないことがらについて、発言してはいかんよ。たぶん、あなたは激しく
間違っている。
0178デフォルトの名無しさんNGNG
ただ今スレ違いな方向に進行中
0179デフォルトの名無しさんNGNG
素数を使って高速化するユークリッドの互除法って、
いったいどういう方法なんだろう?
0180165NGNG
>>167,168,170
アホばっかりでワラタ
0181デフォルトの名無しさんNGNG
5005 ÷ 798 = 6 あまり 217
798 ÷ 217 = 3 あまり 147
217 ÷ 147 = 1 あまり 70
147 ÷ 70 = 2 あまり 7
70 ÷ 7 = 10 あまり 0

よって 798 / 5005 = 114 / 715
0182デフォルトの名無しさんNGNG
でてこい>ちんかす
0183デフォルトの名無しさんNGNG
ねえねえ、素数を使うとどこが高速化されるの?
0184デフォルトの名無しさんNGNG
>>183
強いていえば、2つの数のうちどちらかが素数だったときに
割り算をいくらか省略できる可能性があるくらいかな。

やはり167,168,170,172は真性の...
0185176NGNG
>>184
実のところ、メモリ上に置かれた素数のテーブルを毎回検索する時間のほうが、
CPU内部で完結する整数の割り算より桁外れに時間がかかりそうな気がする。

で、エラトステネスのふるいと混同しているのかなと思ったけど、そもそも、
素数の表を作るのがエラトステネスのふるいの目的なので、現在作成中の
表を見れば、次のループの増分とすべき素数は見つかるから、たぶん
これと混同したわけでもなさそう・・・ はて?

結局、おそらくは、素因数分解をしようということなんだろうけど、約分は、
最大公約数を見つければいいのであって、素因数分解までする必要はない。

素因数分解は桁数が多いと確かに大仕事だけど、最大公約数を見つけるのは、
それに比べて極めて簡単だ、というのがユークリッドの互除法の「威力」
なんですけどね。 なんだかな。
0186184NGNG
>>185
御意。

というわけで話は>>162に戻ると。
0187デフォルトの名無しさんNGNG
有理数より先に、整数を極めるのが得策。
0188デフォルトの名無しさんNGNG
hashCode()は分子分母のGCMで決定
0189デフォルトの名無しさんNGNG
hashは
分子.gcm(分母) % (BigIntegerの最大素数)
0190デフォルトの名無しさんNGNG
>>166
これでどう
class 数
class 実数 extends 数
class 複素数 extends 数

class 有理数 extends 実数
class 無理数 extends 実数
0191デフォルトの名無しさんNGNG
>>190
数学的に考えると、実数は複素数を継承すべきかな?
でも複素数は実数の集約になるんだよな。C++でこんな循環宣言できる?

数学者に集合と継承の違いを説明できるプログラマ求む。
0192デフォルトの名無しさんNGNG
>>188,189
1/2 と 5/10 の hashCode が違う
5/10 と 5/15 の hashCode が同じ
だがそれでいいのか?

分子/gcm(分子, 分母) ^ 分母/gcm(分子, 分母) あたりだろ。
0193デフォルトの名無しさんNGNG
maximaのソースとか参考になるんじゃない?
hashは知らんけど。
0194デフォルトの名無しさんNGNG
>>192
> >>188,189
> 1/2 と 5/10 の hashCode が違う
に関してだけ一言。
有理数クラスに不変性を持たせる
(
 ●setterメソッドといったコンストラクタ以外でオブジェクトを変更できる
  メソッドを使用禁止にする。
 ●クラス継承を禁止にする。
 ●フィールドを全てprivateにする
)
ことを前提として、
5/10はコンストラクタで宣言できるが
実際には存在しない。コンストラクタを呼び出した時点で
約分が開始され約分された値が常にフィールドに入る。


ということで1/2と5/10との違いを意識する必要はなかれ
0195デフォルトの名無しさんNGNG
>>191
C++でもJavaでもオブジェクト指向言語であれば
デザインパターンを使ってどうにかなりそうな気がする。

Compositeパターンはどうだろう?
0196デフォルトの名無しさんNGNG
「FOMA4機種、電卓で再度のバグ」
ttp://headlines.yahoo.co.jp/hl?a=20030820-00000024-zdn-sci

どうすれば複数メーカーでこんな阿呆なバグを作りこめて、検査を通過できるのか、
誰か説明してくれよ。想像つかねーよ。
症状が妙に10進数に依存してるので、固定小数っぽい気もするが。
やっぱ固定小数はダメダメだな。
0197デフォルトの名無しさんNGNG
>>192
なんで排他的論理和をとる?

^だったらBigIntegerではxor()メソッドで
分子.divide(分子.gcm(分母)).xor(分母.divide(分子.gcm(分母)))
0198デフォルトの名無しさんNGNG
>>197
排他的論理和がいやなら

最大公約数 = gcm(分子, 分母)
分子' = 分子/最大公約数
分母' = 分母/最大公約数

のとき 分子'*適当な素数1 + 分母'*適当な素数2 なんかでもいいよ。
ただ素数の取り方によってはハッシュコードがばらけないので注意。
0199デフォルトの名無しさんNGNG
>>198
'を使っているプログラミング言語は?
0200デフォルトの名無しさんNGNG
ML
0201デフォルトの名無しさんNGNG
0.333333.....
とかを、1/3(近似値)に直す方法ある?
0202デフォルトの名無しさんNGNG
それだけだと仕様が曖昧すぎて何ともいえんが。

0.33333333333 は 1/3 に直すが 0.3333333331 は 3333333331/10000000000
になって構わないの?
0203デフォルトの名無しさんNGNG
いや、そう言われると、よくわからないです・・・
0204デフォルトの名無しさんNGNG
連分数展開を使って近似分数を求めればいい。細かい理論は省略。
どこまで細かいのを採用するかは近似精度を最初に与えてやればいい。

0.3333333331 = 1/(3+7/3333333331) = 1/(3+1/(476190475+1/(1+1/6)))
476190475 が十分大きいのでそれ以降を無視して 1/3。
0205デフォルトの名無しさんNGNG
コンストラクタがある少数文字列を循環小数として認識し
どの桁からどの桁までを循環部分にするかを指定して
有理数オブジェクトを生成しよう。
0206デフォルトの名無しさんNGNG
内容が浮動小数から離れているので
多少関係ある事を書くと、

浮動小数点数の基本的知識が要るなら、まず
パターソン&ヘネシー「コンピュータの構成と設計(上)」
の関係するところを読むのが良いと思う。

0207デフォルトの名無しさんNGNG
>>206
しかし数値計算が専門の人の中にも
この本に書いてあるレベルの知識(IEEEのフォーマットとか)
が全くない人が結構いる罠。
0208デフォルトの名無しさんNGNG
非正規数を使った計算をたくさんこなしたい私は、
いったいどんなCPUを買えばいいのでしょう。
Itanium って、正規数と同じぐらい非正規数も速い?
0209デフォルトの名無しさんNGNG
>>208
デノーマルを出しまくって悩んでいたやつがいたなぁ 計算は続行してくれるけど。

そもそも非正規化数をたくさん使うってどういうこと?
0210デフォルトの名無しさんNGNG
通分と約分って何?
0211デフォルトの名無しさんNGNG
確かに整数演算と組み合わせる場合に非正規数を使いたくなるんだよな
0212デフォルトの名無しさんNGNG
>>203
http://www.sci.toyama-u.ac.jp/~iwao/Scheme/r5rsj/html/r5rsj.html
にある rationalize という手続きの仕様を参考にすれば良いのでは
0213デフォルトの名無しさんNGNG
Java の標準数学クラス java.lang.Math の説明にある
「半単調」(semi-monotonic)ってなによ?

理論的に

f(x1) < f(x2)

な関係にある関数 f と x1, x2 があった場合、
相当する java.lang.Math メソッドの戻り値は必ず

Math.f(x1) ≦ Math.f(x2)

を満たすって理解でいい?
0214デフォルトの名無しさんNGNG
文系の漏れに固定小数と浮動小数のちがい、使いみち、メリット、デメリットを
出来るだけやさしく教えてくらさい
0215デフォルトの名無しさんNGNG
いやでしゅ
0216デフォルトの名無しさんNGNG
文系が免罪符だと思ったら大間違いだ!
0217デフォルトの名無しさんNGNG
文系の人はBCDを使って下さい。
0218デフォルトの名無しさんNGNG
>>214

固定小数
 -バカ
 -ごくつぶし
 -見たことしか理解できない
 -十本指の生き物しか相手にしてくれない

浮動小数
 -世間知らず
 -夢はでかいが、大したことしない
 -常識の通じない尼がたまにでしゃばる
0219デフォルトの名無しさんNGNG
> f(x1) < f(x2)
は
f(x1)≦f(x2)
だよね。
0220デフォルトの名無しさんNGNG
>>219
イコールが増えたそのココロは?

 ・f(x1) < f(x2) ならば Math.f(x1) ≦ Math.f(x2) でなければならない

この辺までは解ります。
x1 と x2 が接近すれば、いつかそんな時もあるでしょう。

もしかして

 ・f(x1) = f(x2) ならば Math.f(x1) = Math.f(x2) でなければならない

も必要?それとも

 ・f(x1) = f(x2) ならば Math.f(x1) < Math.f(x2)

もアリ?
0221デフォルトの名無しさんNGNG
>>30
486-SXにはFPU無いが何か?
0222デフォルトの名無しさんNGNG
>>221
自分で387エミュレータ書け。

ていうか、x86系の32bit OSには大概FPUエミュレーションが付いてる様な気がする。
0223デフォルトの名無しさんNGNG
i486SXにもFPUはあるぞ
無効にされてるがな(笑

でもってi487がi486DXそのもので
挿すとメインCPU乗っ取るわけだ
0224デフォルトの名無しさんNGNG
文系は用済の時代
0225デフォルトの名無しさんNGNG
文系、理系とくだらん区別分けしてるのは日本だけ。出来る奴はそんな枠に囚われない。
0226デフォルトの名無しさんNGNG
>>225
胴衣

しかし「理系ですか?」という質問に
「いいえ文系です」と答える奴は逝ってよし。
そういう奴は具体的数字に触ろうとせず
非論理的なことを平気で行い
「私は文系ですから」を免罪符にして正当化する。
0227デフォルトの名無しさんNGNG
そもそも「理系ですか?」という質問する奴が逝ってよしだろ(w
0228デフォルトの名無しさんNGNG
>>223
あたり!

ひどい売り方だった(笑)
0229デフォルトの名無しさんNGNG
セレロン商法は既に出来上がってたんだな・・・
0230デフォルトの名無しさんNGNG
>>214
文型でも経済学部だったら理系同等だろ?
経済学部の香具師は時系列の勉強もしていることからなぜか
信号処理までしっている香具師が多いぞ。
0231デフォルトの名無しさんNGNG
>>213
> 相当する java.lang.Math メソッドの戻り値は必ず
java.lang.Mathはメソッドではなくクラス。
> Math.f(x1) ≦ Math.f(x2)
Java Core APIに標準パッケージとして入っている
java.lang.Mathクラスにこんな f() というstaticメソッドは存在しない。
0232デフォルトの名無しさんNGNG
揚げ足はカエレ
0233デフォルトの名無しさんNGNG
揚げ足取り + age
?
0234デフォルトの名無しさんNGNG
ども。IntelのCPUとAMDのCPUで、浮動小数演算の結果って変わるん?
0235デフォルトの名無しさんNGNG
>>234
SSE2 と 3DNow! の拡張倍精度って、それぞれ何bitだったっけ?
0236デフォルトの名無しさんNGNG
>>223
イスラエル(中東)の商人らしいやり方だな
家畜の値段があわなければ足を切って売るとか

今でも、同じダイで生産してキャッシュ半分殺して安く売ったり
0237デフォルトの名無しさんNGNG
インテルなんてM$と同じで昔からせこいことやってきたんだから。

インサイド・インテルという本読んでみいよ。
元Intelの社員がインテルの悪徳商法を暴露した本だから
そういうのを知りたい香具師にはお勧めだよ。
0238デフォルトの名無しさんNGNG
>>237
そんなことには興味ないし
0239デフォルトの名無しさんNGNG
お前だけのために答えてやってんじゃねえよ
0240デフォルトの名無しさんNGNG
>>237
誰もそんなことは尋ねていない
0241デフォルトの名無しさんNGNG
我儘な餓鬼は黙れ
0242デフォルトの名無しさんNGNG
クロックもそうだな
0243デフォルトの名無しさんNGNG
Intel の内幕に詳しいのなら、スレタイに従って
IEEE754 制定時に Intel がさんざんゴネた経緯の裏事情をプリーズ。
後は浮動小数バグペンティアム騒動とか。
0244デフォルトの名無しさんNGNG
>>220
Therefore, methods with more than 0.5 ulp errors are required to be semi-monotonic:
whenever the mathematical function is non-decreasing, so is the floating-point
approximation, likewise, whenever the mathematical function is non-increasing,
so is the floating-point approximation.

だからイコールが必要。
0245デフォルトの名無しさんNGNG
>>244
おお、サンクス。なんか英語と日本語で微妙に中身が違うような気が。
で、f(x1) = f(x2)は非増加かつ非減少なので、
Math.f(x1) と Math.f(x2) 間も同様に非増加かつ非減少を満たさねばならないため、
Math.f(x1) = Math.f(x2)は常に満たされるということでいいのかな。
0246デフォルトの名無しさんNGNG
>>237
スレ違いで誰も聞いてないのに
自慢気に雑学披露してるあたりがネタですか?
0247デフォルトの名無しさんNGNG
>>245

おい、その
Math.f(x1) = Math.f(x2)
という勘違い表現いい加減にやめろ。
Java記法の常識も数学記法の常識を知らないのか?
0248デフォルトの名無しさんNGNG
それとも、俺的Mathクラスを自作したのか。

package net.2ch.www.俺的パッケージ.俺的Mathライブラリ;
public class Math {

 //コンストラクタはアク禁にする。
 private Math(){}

 public static double f(doule x){
  //関数の実装;
 }
}
0249デフォルトの名無しさんNGNG
別のパッケージからあれを呼ぶ。
package net.2ch.www.俺的パッケージ.俺的MathライブラリDemo;

import net.2ch.www.俺的パッケージ.俺的Mathライブラリ;

public class MathDemo {
 pulic static void main(String[] args){
  if( Math.f(3.0d) == Math.f(3.0d)){
   System.out.println("同じ")
  }

  double x = 2,
       y;

  //標準に存在するMathクラスを使用するときは重複しているMathクラスとの
  //混同を避けるためわざわざjava.lang.Mathと記述する。
  y = java.lang.Math.sin(java.lang.Math.PI * java.lang.Math.pow(x, 2));

 }
}
0250デフォルトの名無しさんNGNG
だが関数を自作するときはこうすべきだろ

public abtract class Function {
 public abstract double f(double x);

}

自作Functionクラスを使って適当に関数を作る

public 俺用Function extends Function {
 public double f(doube x){
  return Math.cos(x) + Math.cos(2 * x) + Math.pow(x * x) * Math.tan(x);
 }
}

使用方法

public class FunctionDemo {
 public sitatic void main(String[] args){
  int size = 2000000;
  double[] a = new double[size];
  Function function = new 俺用Function();
  double d = -10.0d;
  for(int i = 0; i < a.length; a++){
   d += 0.00001d;
   a[i] = function.f(d);
  }
 }
}
0251デフォルトの名無しさんNGNG
とにかく、f(x)とかけばすむものをMath.f(x)とかくのは余計というかアフォくさいということ
0252デフォルトの名無しさんNGNG
>>251
実装毎の Math.hoge() の返す値についての話をしてるんだよ。
準単調関数についてはある実装で Math.f(x) < Math.f<y) ならば、
他の実装でも Math.f(x) <= Math.f<y) だよね、とか。
ついてこれないなら黙って他方がいいよ。
0253デフォルトの名無しさんNGNG
痛い>>251がいるスレはここですか?
0254デフォルトの名無しさんNGNG
>>1
PIC S9(5)V9(2)
なんてのが好きなのか?

>>229
8086と8088
などインテルの伝統。

>>237
モトローラはもっとえげつない。
0255デフォルトの名無しさんNGNG
>>247
>おい、その
>Math.f(x1) = Math.f(x2)
>という勘違い表現いい加減にやめろ。

あー、すまんすまん。
Math.f(x1) の部分が Java の式で、
全角イコールは数学でいうところの等号だ。
f はイタリックと思って薄目で見てくれ。数学関数名を適当にあてはめればよし。
ところで全角イコールを何だと思ったのかな?C++なら代入もアリか.....

>>248
>>249

Javaの名前空間の話はスレ違い。
java.lang.StrictMath と比べた java.lang.Math の答えのひどさの性質に関する
お話でつ。ひどいなりに色々頑張ってるらしいのよ。

>>250

ぷっ。

>>252

「半単調」や「準単調」でググってもろくにヒットしないのですが、
どっち方面の用語なのでしょう。信号?
0256デフォルトの名無しさんNGNG
>>252 もよく分かってなさそうだよね。
0257デフォルトの名無しさんNGNG
>>256=251
0258256NGNG
>>257
各実装毎の相違など議論していないのだが、理解できないか?
0259デフォルトの名無しさんNGNG
ここで議論されてるのは、理論値と実装の話。
なので 252 も 251 同様のアホ。




って漏れが252なんだけどさ。
0260デフォルトの名無しさんNGNG
>>258=256=251

>>259=252
0261デフォルトの名無しさんNGNG
>>42
あります。

"Floating Point Computation"
Pat H. Sterbenz
Prentice-Hall, INC
1974

が、もう20年以上好評絶版中。

ちなみにKnuthのThe Art of Computer Programmingの
日本語版なら第4分冊準数値算法の浮動小数点算術演算の章に
浮動小数点算術演算アルゴリズムの基本的なことは大体書かれています。
実際に実装するとなると大事なことが幾つか抜けてますが。

あとユーザー的に知っておくべきことをまとめた文章としては

What Every Computer Scientist Should Know About Floating-Point Arithmetic
David Goldberg
ACM Computing Surveys, Vol.23, No.1, March, 1991

(有名なんだけど、どっかで日本語になってないのかな?これ。)
0262デフォルトの名無しさんNGNG
>>140
まぁ、演算が終わるごとに約分しとくのが無難かと。
BigIntegerのときに演算ごと正規化(互除法による約分)をサボっても
分子分母の整数の計算で桁数増えるから多分結局計算遅くなるしね。

あと面白い表現として有限精度の有理数による近似ってことでFloating Slash Numberってのもあるですよ。
11/256, 111/23ってな感じで有理数の分母と分子の桁数合計が一定になるように丸める奴。
分数の"/"が浮動するから浮動スラッシュ。

"Finite Precision Rational Arithmetic: Slash Number System"
David W. Matula and Peter Kornerup
IEEE Transactions on Computers Vol. C-34, No.1 Jan. 1985
0263デフォルトの名無しさんNGNG
>>163
BigIntegerを使った多重精度浮動小数点数なら作りました。
四則演算もさることながら基数変換が死にそうにシンドかったです。

研究集会で発表した際に例題のπの計算で途中の桁から先間違ってて
間違いを指摘されたのが恥ずかしかったことよ。
(たぶん丸めのバグ。)
0264デフォルトの名無しさんNGNG
>>191
AXIOMという数式処理システムの型の構造が参考になろうかと。
数だけじゃなくて抽象表現である群とか環とか体とかから導き出してあります。

型は単なる値の集合じゃなくて
演算による値の集合の要素間の対応関係もコミだから代数系と考えられます。
そのように型を代数系と思うと継承(包含)は部分代数系でなければならないといえます。

で、複素数は集約でテンプレートで作っておくのが実際的かと。
ポリモルフィズムは継承じゃなくて型変換と多重定義で実現しておくと。
(どうせ実装が継承できるわけではないし。)
まぁ、STLばりにアルゴリズムが対象の数学的性質から自動選択されるようにするなら
抽象的な群、環、体などから継承しとけばいいかと。
(親子じゃなくて兄弟にしとくわけね。)
0265デフォルトの名無しさんNGNG
>>264
正確に言うと

親の型に対応する代数系A、子の型に対応する代数系Bとして
BはAの部分代数系ということです。

代数系は台集合(まぁいわゆる値の集合)と
その上で閉じた演算の集合で表現されます。
「その上で閉じてる」というのは台集合上で演算した結果はが台集合に含まれるということです。
部分代数系の場合、部分代数系も台集合が親の台集合の部分集合で、
かつ「親」の演算がその部分代数系の台集合について閉じている必要があります。

実数rと複素数r+0.0*iという自然な対応がありますから
何らかのポリモルフィズムが期待されます。
実際複素数の集合に実数の集合は完全に含まれていて
実数の加減乗除といった基本演算は
複素数上で行っても実数の範囲で閉じてますから
確かに継承で表現できる可能性はあります。

ただ、実装の継承が開発効率上・実行効率上意味がないので
(まぁベクトル値からスカラー値を継承するようなもんだし)
ムリに継承でこのポリモルフィズムを実現するのはあまり実用的ではありません。
なので型変換と演算子、関数の多重定義で実現しておくのが無難であるわけです。
(Javaにはどっちもないのが残念ですが。)

0266デフォルトの名無しさんNGNG
>>250
C++のような()演算子の多重定義があれば完璧な関数オブジェクトだったのに!w
使うその場でnewするより関数ポインタの代わりに他所へ渡せるところが醍醐味。

関数オブジェクトといえば余談:

double samples[] = new double[N];
//....samples[]をサンプル値で初期化。
Function f = FFT(samples, N);
//...
y=f(x)//フーリエ級数による補間。

とかいうインターフェースができますねというのは十年前のMy修論w。
0267デフォルトの名無しさんNGNG
16bit浮動少数点数クラスを作りたいんだけどよくわかんねぇ・・・
0268デフォルトの名無しさんNGNG
16bitって仮数何桁・・・
0269デフォルトの名無しさんNGNG
>>267
IEEE単精度や倍精度の指数部:仮数桁数の比が
[8:24] だったり [11:53] なのは何か根拠があるんだっけ?
16bitかあ。なんとなーくだけど[6:10]ぐらいじゃない?

※ フォーマット上、仮数桁の整数部が略せるのはいうまでもなし。
0270デフォルトの名無しさんNGNG
>>269
「仮数桁」って何?
お前の辞書にしか載ってない用語使われても誰も理解できんだろ
0271!=269NGNG
>>270
仮数部(小数部)の整数を表す桁と言いたかったんじゃないの?
小数部が0.1{1|0}*となるように正規化してあれば最上位の0は省略できるって話でわ?
0272デフォルトの名無しさんNGNG
>>265
> ただ、実装の継承が開発効率上・実行効率上意味がないので
> (まぁベクトル値からスカラー値を継承するようなもんだし)
> ムリに継承でこのポリモルフィズムを実現するのはあまり実用的ではありません。
> なので型変換と演算子、関数の多重定義で実現しておくのが無難であるわけです。
> (Javaにはどっちもないのが残念ですが。)
んなこたあない。メソッドのオーバーロード、オーバーライドがあるだろうが。
なに嘘を公表してるんだお前は。
0273デフォルトの名無しさんNGNG
>>255
> >>247
> >おい、その
> >Math.f(x1) = Math.f(x2)
> >という勘違い表現いい加減にやめろ。
>
> あー、すまんすまん。
> Math.f(x1) の部分が Java の式で、
Javaの式だと? JavaのMathクラスにhoge()なんてメソッドもf()というメソッドもないんだよタコ。
それとも>>248のように独自にMathクラスを定義したと仮定して話を進めているつもりか。
人に誤解を生むような糞表記はやめろ。
事前に説明しろ。おまえは Javaコード内でMath.f(x1)とかけばコンパイルが通ると勘違いしているみたいだからな。

> 全角イコールは数学でいうところの等号だ。
> f はイタリックと思って薄目で見てくれ。数学関数名を適当にあてはめればよし。
> ところで全角イコールを何だと思ったのかな?C++なら代入もアリか.....

おい、そうじゃない。話を飲み込めない馬鹿め。

Math.f(x1)というお前の表記はどこの仕様の表示法なのかきいとるんだよ。
それともお前の独自仕様の「オレ仕様表記法」か?
0274デフォルトの名無しさんNGNG
おまえ、頭悪いな。
0275デフォルトの名無しさんNGNG
>>272
数式書くのに関数の多重定義や演算子オーバーロードが無くて残念だよね、って話じゃないの。
暗示的な型変換(実数→複素数のような)もあると便利だよね、とか。

この板も強制ID制にして欲しいなあ。
0276デフォルトの名無しさんNGNG
>>275
> >>272
> 数式書くのに関数の多重定義や演算子オーバーロードが無くて残念だよね、って話じゃないの。
おまえ本当にJavaを知っているのかと。
メソッド(関数)のオーバーロード(多重定義)ならJavaにもあるんだが。

演算子のオーバーロードは独りよがりなコードが乱立しコードの可読性を下げスパゲティ化するから糞。

> 暗示的な型変換(実数→複素数のような)もあると便利だよね、とか。
甘いな。それではオブジェクト指向言語としての利点が失われる。
そんな馬鹿機能を使いたければPerlやMATLABでもつかっていろと。

せいぜいこれくらい程度にしておけ。
public Complex extends Number
これで複素数クラスとDoubleクラスはNumberクラスを共通のスーパークラスとして
楽に管理できる。
0277デフォルトの名無しさんNGNG
こっこれがJava厨と言うものか!
0278デフォルトの名無しさんNGNG
Smalltalk厨でも同じこというぞ
0279デフォルトの名無しさんNGNG
>>272
Javaにユーザー定義型変換演算子と、ユーザによる演算子多重定義があるなら使ってみたいもんだ。
0280261-266NGNG
>>276
> 演算子のオーバーロードは独りよがりなコードが乱立しコードの可読性を下げスパゲティ化するから糞。

それはo1+o2やo1-o2をo1.add(o2)やo1.sub(o2)と書くにしたって同じこと。
例えば、メソッドの多重定義、オーバーライドしかないJava世界でも
clone()とかprint()とかtoString()に妙な意味をつけるとかすれば
演算子の多重定義はないにも関わらず同様の問題は起こる。

つまり可読性の問題は他の慣習や名前の直感的意味と整合しない
妙な意味の演算子を定義することそのものが悪いんで、
演算子多重定義機能そのものが悪いんじゃないということ。

で、それとは別に、
演算子多重定義機能を取り入れた際の言語仕様・パーザーの肥大化・複雑化と
その機能の(Javaの予想適用分野での)有用性を天秤にかけて
Javaには入れないと判断した
Javaの仕様策定者達の判断はそれはそれで一つの選択であるとは私もおもうが。
0281261-266NGNG
>>275
そういう意味です。

まぁ言えばオブジェクトやクラスのメソッドはあっても
そもそもトップレベルの「関数」だってJavaにはないわけでw。
(「ない」ことが即ち「いけない」とは言ってないです。念のため。>>276)
0282261-266NGNG
>>276
> public Complex extends Number
> これで複素数クラスとDoubleクラスはNumberクラスを共通のスーパークラスとして
> 楽に管理できる。

実は実数は複素数の部分代数系になってますが、
逆は成り立たないので、兄弟のような対等の関係では有りません。
一応、暗黙の型変換や継承による直接の先祖・子孫関係なら
その辺の「方向付け」は表現できます。

中でも暗黙の型変換ならば実数の集約により複素数を表現するという
ポピュラーな実装戦略との相性も悪くありません。

一方、継承で表現しようとする場合は
子孫である実数クラスで実装される演算を利用して
先祖である複素数クラスを実装することになるか、
複素数クラスの中に複素数クラス特有のコードに加えて
実数クラスに必要なコードがすべて含まれるという少々ナニな構成になってしまいます。
こんな構成にするくらいなら無理に関連付けず
いっそ各々独立のクラスにして利用関係でだけ関連付けられているほうがマシでしょう。

というように両者には実装の共有があんまりないので、多相の機能的な本質は
演算子多重定義と型強制(暗黙の型変換)による
コード自動選択機能で片付いてしまうのです。

しかしJavaの場合は演算子多重定義も暗黙のユーザー定義型変換もないので、
どっちもメソッドでやることになるでしょう。
(a.add(b)とか(new Complex(d))とか言ったノリで。)
こうなってしまうと特に独立のクラスとして作成する以上に
何かできることはないわけで。
(無理に継承で表現しても上記の通りだし。継承兄弟にする意味もないし…。)
0283261-266NGNG
>>276
Javaの場合ComplexがNumberを拡張してもイマイチな気がします。
Numberは別に「体」などの数学的構造を表現してるというわけでもなく
単に組み込みの数型のラッパー・クラスに共通な親クラスという以上の意味はないようです。
(どうせメソッドもintValue(),longValue(),floatValue(),doubleValue()くらいしかありませんし。)
例えば、無理に継承したところで、
複素数クラスのdoubleValue()とかナニ返したら役に立つん?実部?虚部?絶対値?
…という話もあるわけです。
0284261-266NGNG
さらに言うと、複素数を「実数」に基づいて表現するにしても
実数の表現手段(近似手段)には、

>>1にも上がっている固定小数点数、
 ・・・・・・整数演算ベースで高速だが、小数点の管理が面倒、
     事前に計算される数の範囲を把握しておかねばならない
ポピュラーな(単精度、倍精度)浮動小数点数、
 ・・・・・・固定小数点数より機構が複雑だが利用しやすく、
     近年では専用ハードが普及し、
     プロセッサによっては整数演算と競えるほど高速化している
数式処理世界ではポピュラーな任意多倍精度整数に基づく多倍精度有理数、
 ・・・・・・丸め誤差がないが、必要に応じて大きな記憶領域を食い、
     計算時間が定数とは看做せない。その上に遅い
任意多倍精度整数に基づく多倍精度浮動小数点数、
 ・・・・・・丸め誤差は必要なだけ小さくでき、計算時間が定数で抑えられるが、
     必要に応じて大きな記憶領域を食い、やっぱり遅い
有限精度有理数(floating slash)
 ・・・・・・(ゴメン性質まではまだ調べてません。)

などのバリエーションがあって状況に応じて使い分けたくなったりします。

こうなるとテンプレートによる総称化(C++の場合)か
抽象クラス・インターフェースによる制約つき総称化(Javaの場合)が
欲しくなって来ます。
どのみち単純なNumberの継承ではおっつかなくなってきます。
0285261-266NGNG
>>276
> 甘いな。それではオブジェクト指向言語としての利点が失われる。

「白い猫も黒い猫も鼠を取るのが良い猫だ。(by �ケ小平)」
……つまりオブジェクト指向であろうがなかろうが役に立つのが良いパラダイムw。

さて、暗黙のユーザー定義型変換や演算子多重定義などの
ユーザー定義の「ad hocなポリモルフィズム」があると失われる
「オブジェクト指向言語としての利点(by >>276)」って一体何だろー?w

> そんな馬鹿機能を使いたければPerlやMATLABでもつかっていろと。

まぁ、C++ってのもあるわけだが。

加えて、ぶっちゃけて言えばユーザー定義こそできない限定的なものではあるが
暗黙の型変換と演算子多重定義の仕組み自身は
Javaでも備えてるわけなのであるがw。
(整数や浮動小数点数の混合演算における「昇格」とか
整数加算の+と浮動小数点数加算の+、そしてString連結の+の多重定義とか。)
0286デフォルトの名無しさんNGNG
>>278
>Smalltalk厨でも同じこというぞ
Smalltalk って型変換オペレータなんてのは言語の性格上もちろんないけど、
operator + とかみたいな中置1項セレクタは普通にユーザが定義できなかったっけ?
0287デフォルトの名無しさんNGNG
>>1はCOBOLer
0288デフォルトの名無しさんNGNG
>>266
> >>250
> C++のような()演算子の多重定義があれば完璧な関数オブジェクトだったのに!w
> 使うその場でnewするより関数ポインタの代わりに他所へ渡せるところが醍醐味。
>
> Function f = FFT(samples, N);
> y=f(x)//フーリエ級数による補間。

こんな機能いらん。そんな使い方はオブジェクト指向の敵。
ソースコードを汚す行為は許されないことだ。
Function fft = new FFT();
y = fft.f(x);
に書き直せ
0289デフォルトの名無しさんNGNG
FFTクラスの実装例は実際にはこうだ。

//StrategyパターンでFFTのアルゴリズムを選定すること。

class FFT extends ComplexVectorFunction{
 private FFTAlgorithm fftAlgorithm;
 public FFT(FFTAlgorithm algorithm){
  this.fftAlgorithm = fftAlgorithm;
 }
 public ComplexVector f(ComplexVector vector){
  //FFT実装
 }
}

0290デフォルトの名無しさんNGNG
関数をオブジェクトに出来ないJavaは糞
0291デフォルトの名無しさんNGNG
Class hoge = Class.forName("Hoge");
Method method = hoge.getMethod("createHoge",null); // ※1
Hoge createdHoge = method.invoke(hoge.newInstance(),null);

※1 関数オブジェクトありますよー
0292デフォルトの名無しさんNGNG
>>285

過ぎたるは及ばざるが如し
0293261-266NGNG
>>288
なんでオブジェクト指向の敵なのかちゃんと説明してけろ。
ソースコードを汚すって何スカ?

私の例はサンプル列で初期化される
1引数関数オブジェクトに過ぎんと思うのだがw。
(正確には関数オブジェクトとして利用可能なフーリエ級数オブジェクト)
C++では構築子を暗黙の変換にも使えるが、
この場合それでも意味には違和感はないように思う。
(構築子の処理が重いことの是非はともかく。)

ちなみに当時(約10年前)はまだパターンすら話題になってなかったんで
その例には入ってないが、
今作ってるヤツはテンプレート・メタ・プログラミングを使って
各種のFFTアルゴリズムを静的に展開できるようにもする予定。
でそれらについて一回コンパイルして自動プロファイリングもやって
環境と指定された要素数Nに合わせてアルゴリズムの組み合わせを選び、
最適なFFTルーチンの構成を作り出せるテンプレート群を生成する。
以降生成したテンプレートがデフォルトで利用されるので
結局トップレベルでは要素数指定だけで
一々アルゴリズム指定はしない使い方も可能になる予定w。

なんとか今年中に動かしたいw。
何せその後でそれを多倍精度整数乗算に使う予定だから。

>>292
で、何が過ぎててどう及んでないと?
独りよがりなこと言ってないでちゃんと解説しる。
0294261-266NGNG
ま、Java設計者の選択は分からないこともないので>>290には同意しないが、
>>291のメソッド・オブジェクトはリフレクション的な意味合いの話なんで
ここまで話に出てきてる部品としての関数オブジェクトとは大分趣旨が違うような…。
0295261-266NGNG
>>293
> >>288
> なんでオブジェクト指向の敵なのかちゃんと説明してけろ。
> ソースコードを汚すって何スカ?

ちなみにオブジェクト指向云々じゃなくって

仕様・パーサーの肥大化・複雑化のコスト vs. 機能の有用性の度合い

でトレードオフを考えた結果JavaとC++で異なる設計上の選択がなされた
という話なら私も納得できるんだが。

その結果として私もJavaとC++を必要に応じて使い分けてるわけだが。
0296デフォルトの名無しさんNGNG
JavaはC++よりコード量が多いからequals()を==にかえたほうがいいと
ほざく馬鹿はJakarta Velocityを使って目を覚ませ。
0297デフォルトの名無しさんNGNG
>>292
 つまりC++はJavaの如し
ということか
0298デフォルトの名無しさんNGNG
なんかキモイのが常厨してるよ
0299デフォルトの名無しさんNGNG
>>296
Javaは純粋なオブジェクト指向だからイイ(・∀・)!!とか
ほざくバカはSTLを使って開眼しろ。
0300オブジェクト指向促進運動NGNG
IT業界にアージャイル開発とデザインパターンを広めよう!

C言語を使ってかなり苦労したので
その苦労を最小限におさえるために
アージャイル開発、デザインパターンを
多くのプログラマに使って欲しいと思うことがある。

一種の挨拶みたいなものだね。
「なるべく挨拶を心がけましょう。」
「なるべき綺麗な字で書きましょう。」
のように

デザインパターンを使うこと、アージャイル開発することが
プログラマの習慣、常識になってほしい。

なんとか、デザインパターン文化、アージャイル開発文化を押し広げられたら・・・。

IT業界の将来はオブジェクト指向とアージャイル開発が握っています!
0301デフォルトの名無しさんNGNG
>>300
コピペなん?
0302デフォルトの名無しさんNGNG
288君の回答マダー?(AA略
0303デフォルトの名無しさんNGNG
EclipseのCDTはマダーだよ
0304デフォルトの名無しさんNGNG
>>299
全然>>296と関係のないこといってるし。噛み合ってないね。
STLがどうしたって。

JavaがSmalltalkのような純粋なオブジェクト指向だと思ってないだろうし
STL利用可能だからC++でオブジェクト指向を理解しやすいとはおもってないだろうなあ。

C++に勝るJavaの利点は例外処理やエラー処理の厳しさに尽きる!
STLだけでは同等のことをやるにも限度がある!
0305デフォルトの名無しさんNGNG
Javaの話は専用スレでやってくれ。
0306デフォルトの名無しさんNGNG
IEEE754 を閲覧できるところ誰か知りません?
今は亡き富士通のコンピュータサロンみたいなとこ、もう無いのかなぁ。
0307デフォルトの名無しさんNGNG
>>306
規格書はもちろん有料 http://www.ieee.org/ から買える

ただし、良質のレクチャーノートが以下のURLにある
http://grouper.ieee.org/groups/754/
0308デフォルトの名無しさんNGNG
>>304メル欄見れ。 …というのはともかく。

代わりにJavaではGenerativeスタイルはできないからなw。

ま、どっちも究極や終着駅ではないのだから一長一短があるのさ。
0309KingMathematician ◆5lHaaEvFNc NGNG
マジレスすると、科学技術計算に浮動小数点は必須。
0310デフォルトの名無しさんNGNG
浮動小数点は誤差があるので学術的に使うことは有り得ない

普通はBCD
0311デフォルトの名無しさんNGNG
釣られクマー
0312デフォルトの名無しさんNGNG
BCDは理想的でも 実際には処理が遅いからあまり使わない
0313デフォルトの名無しさんNGNG
BCDが理想的って、どこ見ていってんの?
0314KingMathematician ◆5lHaaEvFNc NGNG
Re:>>310 もともと有効数字の少ないデータを扱う場合は、誤差は関係ないのでは?
0315デフォルトの名無しさんNGNG
×もともと有効数字の少ないデータを扱う場合は、誤差は関係ないのでは
○科学技術計算では必要な桁数だけ計算するもの
0316デフォルトの名無しさんNGNG
BCDだって3で割ったり平方根とったりすれば誤差が出る。
本質は10進表示かそうじゃないかってことだけだ。
10進表示された小数をかけ算する場合に桁落ちを発生させないための
ものであって、それ以上の演算で誤差がないなんて、誰も保証していない。
誰が10進表示された小数を使うかっていうのは、金利計算する金融屋だ。
科学屋が10進表示にこだわる理由はどこにもない。
0317デフォルトの名無しさんNGNG
>>310
科学技術計算ライブラリのメーカーをなめとるなワレ。
0318デフォルトの名無しさんNGNG
十進コンピュータ最強
0319デフォルトの名無しさんNGNG
>>316
BCDは、有効桁数の範囲なら誤差が出ないってことなんじゃない?
0320デフォルトの名無しさんNGNG
>>319
浮動小数点形式と比べて良いという理由になりますか?
0321デフォルトの名無しさんNGNG
>>320
なるだろ。
ベストじゃないがベター
0322デフォルトの名無しさんNGNG
通貨型ってやつ?
0323デフォルトの名無しさんNGNG
>>321
その根拠は? x=x/3 して x=x*3 した場合にどちらが1に近いと予想しますか?

次に x=x/8 して x=x*8の場合は?
0324デフォルトの名無しさんNGNG
BCDと固定小数をごっちゃにしてないか?
0325デフォルトの名無しさんNGNG
BCDは固定少数表現の一種ですが何か?
0326デフォルトの名無しさんNGNG
>>323
両方誤差が出ます。1にはなりません。この点では同じです。

それではこのような例ではどうでしょうか?
> http://www.geocities.co.jp/SiliconValley/4334/unibon/javascript/decimalcalculate.html
> 0.01 + 0.05 = 0.060000000000000005
> 0.01 + 0.06 = 0.06999999999999999

この例では浮動少数では誤差が出ますが、
固定少数では誤差は出ません。

比較するときに同じようにだめな結果を持ってきても意味がありません。
違う点を見ましょう。その結果固定少数のほうがベターなのです。
0327デフォルトの名無しさんNGNG
>>326
残念ながらお答えは正しくありません。
一般的な浮動小数点方式では1/8 して8倍しても正しく元に戻ります。
もちろん1/10して10倍しても誤差が出ない表現方法もあります。

そして、 0.01 + 0.06 は、固定小数点でも、少数以下を10の倍数に取った時には
誤差なく表現出来ますが、一般の2進固定少数表現では誤差が出ます。

そして、一般の科学技術計算では、10の倍数に取ろうが、2の倍数だろうが、誤差に
ついては同じです。
0328デフォルトの名無しさんNGNG
足し算ごときで誤差が出るのか。
浮動少数は使えないなw
0329デフォルトの名無しさんNGNG
>>326
> 一般的な浮動小数点方式では1/8 して8倍しても正しく元に戻ります。
> もちろん1/10して10倍しても誤差が出ない表現方法もあります。
それはたまたま元に戻る場合があるってだけ。
この例が固定少数でどうなるかを考えると…同じく元に戻るんだな。

比較するときに同じ結果になるものを持ってきても無駄だってw
固定少数は完璧じゃないんだから問題あるし、
浮動少数は欠点けじゃないんだから問題ない場合もあるだろ。
違いを比べてみるとやっぱり固定少数のほうがベターなんだよ。
0330デフォルトの名無しさんNGNG
どうでもいいが、「固定小数点」ってのは小数点以下の有効桁数が
常に一定であるってことを言うのであって、
基数が10なのか2なのかってのとは全く別の話だと理解してくれよ。
0331デフォルトの名無しさんNGNG
なんとも何をおっしゃりたいのかよく判らん。  それは普通は議論の対象になりません。

少数以下の有効桁数が固定なら、2乗して平方しただけで大きく誤差を増やしてしまう。

まあ、比較が好きならお好きになさい。
0332デフォルトの名無しさんNGNG
>>331
比較が嫌いなら最初っからこのスレに書き込まないことです。
貴方のためです。その方が傷つかずにすみますよ。
0333324NGNG
>>325
違うよ。>>330が正解。
0334デフォルトの名無しさんNGNG
>浮動小数点は誤差があるので学術的に使うことは有り得ない
>普通はBCD

>BCDは理想的でも 実際には処理が遅いからあまり使わない

>BCDは、有効桁数の範囲なら誤差が出ないってことなんじゃない?

バカというか、突っ込まれて、とち狂ってるとしか思えんが、いちおう言っとこう。

もっと勉強しる!
0335デフォルトの名無しさんNGNG
>>334
釣りか?
0336デフォルトの名無しさんNGNG
皆が言ってるように、どんな表現方法だろうがビット数以上の精度は出ない。
有効桁数の範囲なら誤差が出ないなんて事はありえない。

金利計算で誤差が出ないなんてのも迷信。
1%複利で100年 利子が幾らになるか誤差無く計算出来るのに何桁必要だと思うんだ?

表現可能な範囲内で表現可能な誤差に収まるというだけの事。
0337デフォルトの名無しさんNGNG
ここでひとつトリビア

x86のFPUは




BCDも浮動小数点で計算している。
0338デフォルトの名無しさんNGNG
分数で処理しる
0339デフォルトの名無しさんNGNG
>>338
有理数の間はうまくいくだろうがな
0340デフォルトの名無しさんNGNG
数式処理の話になりそうだ。
0341256NGNG
>>336
1%複利で100年後の利息は、「元本*1.01^100 - 元本」で計算できる。
1.01^100 の正確な値は、
 2.70481382942152609...9510001 (数字が201個並ぶ)
である。一方、1.01^100 を double で計算すると、
 2.704813829421529
であり、小数第14位まで一致している。つまり、30京円ぐらい
までなら、誤差なく計算するのに15桁必要である。
0342デフォルトの名無しさんNGNG
>>329
>この例が固定少数でどうなるかを考えると…同じく元に戻るんだな。
戻らないよ。

10進型で考えると
固定少数
 少数以下3桁を覚えていて 現在 1.234 という数があるとする。
 1/10すれば 0.123 で 10倍すれば 1.230 で 0.004を失う。

浮動少数 
 4桁を覚えていて 1234E-3
 1/10すれば 1234E-4
 10倍すれば 1234E-3 情報は失わない。


科学技術計算は足し算だけじゃないんだよ。
そして科学技術計算では、精度をコントロールしなければならない。 
BCDでは殆ど無理。
0343デフォルトの名無しさんNGNG
だからBCDと固定小数は違うんだってば。
0344デフォルトの名無しさんNGNG
なんか BCD を勘違いしているみたい
BCD っていうのは

0.56
= 0000 . 0101 0110

のような表現
固定小数か浮動小数かは関係ない
0345デフォルトの名無しさんNGNG
BCDとpacked BCDは区別しなくてもいいのか?
0346デフォルトの名無しさんNGNG
このスレでは区別する必要はないように思うけど、何か問題ある?
0347デフォルトの名無しさんNGNG
>>344
それはつまり自分ひとりBCD浮動少数型の話をしていたという意味か?

xxxxxxxxx * 10^ aaaaa
0348デフォルトの名無しさんNGNG
>>347 >>344ではないけど
>そして科学技術計算では、精度をコントロールしなければならない。 
>BCDでは殆ど無理。
という結論他、固定小数型の特徴をBCDの特徴としてる香具師が多いという話。
0349デフォルトの名無しさんNGNG
>>348
つまり、俺は、浮動少数型BCDを発明したって言いたい訳だな?
0350デフォルトの名無しさんNGNG
>>349
別に俺は発明してないけど、存在はするし、使ったこともあるよ。
0351デフォルトの名無しさんNGNG
>>350
では質問。

 A * B^ C

という表現方法のどこをBCDにしたのですか?
0352デフォルトの名無しさんNGNG
>>351
BCD * 10 ^ C
じゃないの?
0353デフォルトの名無しさんNGNG
>>351
Aは確実。普通に考えればBは10で固定だから内部にはいらないよね。Cは記憶にない。
8bit機のBASICだったから内部表現までは覚えてない。すまんね。
0354デフォルトの名無しさんNGNG
>>352-353
それだと、BCDである事の意味がないんだよ。

B=10として Aが整数で C が整数であれば A,Cの表現がBCDだろうが整数だろうが数学的には意味がない。
技術的には、AがBCDであれば、 x10 1/10する処理が楽というだけ
0355デフォルトの名無しさんNGNG
>>354
長桁計算で最終的な結果を10進数で出力する場合、出力が楽になるという利点がある
0356デフォルトの名無しさんNGNG
>>355
それは、数学的な意味じゃないし、そもそもの発端である 科学技術計算にBCDとも関係ない話
0357デフォルトの名無しさんNGNG
>>356
パフォーマンスも数学的には関係ないよね
0358デフォルトの名無しさんNGNG
人間が手計算をするときは10進で行う。
コンピュータで計算させるときも10進で行えば、誤差を含めて手計算と結果が一致する。
この辺が金融系でBCDが使われる理由なのかな。

誤差を無くしたいなら実数ライブラリ(浮動小数点数ではない)でも用意するしかないか
0359デフォルトの名無しさんNGNG
>>355
10進変換の負荷が重要になるなんてのは、せいぜい加減算しかやってないからだろう。
掛け算が入ると、計算負荷はBCDがの方が何桁も大きくなる。
せめて100進、万進だな。
0360デフォルトの名無しさんNGNG
>>358
それもよくある誤解だね。

浮動小数点でも、あらかじめ1万倍して計算するとすれば、1/1万まで手計算したのと完全に一致する。
0361デフォルトの名無しさんNGNG
>>359
それも BCD だが…?
0362デフォルトの名無しさんNGNG
C言語でBCD計算ってどうやってするですか?
0363デフォルトの名無しさんNGNG
>>361
2進化100進 なら Binary Coded Centimal ?


 
0364デフォルトの名無しさんNGNG
>>362
10進数は効率悪いから 8bitで100進 16bitで万進を使う事が多いよ。
0365デフォルトの名無しさんNGNG
>>364
M 進数加算 A=B+C

int cy=0;
for(i=0;i<n;i++) {
 cy+=B[i]+C[i];
 A[i] = cy % M;
 cy/=M;
};

負数は表現方法が色々あるけど、M-1の補数が楽だよ。

で、トータルでは、8bitで100進数が掛け算が楽でいいよ。
0366デフォルトの名無しさんNGNG
Intel IA-32 には18桁のBCD演算命令があるけど使わないですか?
0367デフォルトの名無しさんNGNG
>>354
BCDの浮動小数表現について知ってることを書いただけだから数学的に
意味があるかどうかはこの際どうでもいいよ。まあ、当時は0.1を10回足すと
きっちり1になるというのが特徴だったけどね。

俺が言いたいのはBCDが固定小数に包含される概念ではないということを
わかってほしいだけ。
0368デフォルトの名無しさんNGNG
>>366
FPUの演算命令は浮動小数点と同一。
メモリ上のBCDデータはST(0)レジスタに読み込まれた時点で
自動的に80ビットの浮動小数点に変換される。

AX/ALレジスタの演算結果をBCDに補正する命令もあったけど
これの32bit拡張版は無かったんだっけ?
0369デフォルトの名無しさんNGNG
>>368
80bit 浮動小数点数って仮数部は何ビットあるの?
0370デフォルトの名無しさんNGNG
仮数部64、指数部15、符号1 >FPUレジスタ
0371デフォルトの名無しさんNGNG
暗算最強
0372デフォルトの名無しさんNGNG
BCD浮動小数点方式は処理速度と有効数字に難がある。
0373デフォルトの名無しさんNGNG
今俺はDSPのコードを書いている。
廉い固定小数点だ。

シフト、位置合わせて、またシフト。 ああ・・・・・・
0374デフォルトの名無しさんNGNG
>>373
タイガー手廻計算機を思い出すな・・・
0375デフォルトの名無しさんNGNG
えーと、実装経験者に質問なんですけど。IEEE754 に従って
正確な直近丸めモードで単精度演算を行った結果が
正規数の最大値(≒ 3.4028235e+38f)だったとします。
さて、丸める前の「真の値」が、この正規数の最大値より
大きい値だった可能性はあるでしょうか。

※ フツーの正規数なら、各々の値の相対誤差範囲内で
  大きい場合も小さい場合もあるよね。

0376デフォルトの名無しさんNGNG
実装経験者なんているのか?
俺予想としては「ある」だけどな
0377デフォルトの名無しさんNGNG
IEEE754とだけ伝えるより、
仮数**bit・指数**bitと言った方が、
面白い答えがいっぱい返ってくると思われ
0378デフォルトの名無しさんNGNG
おそレスですまんが、
>>336
>皆が言ってるように、どんな表現方法だろうがビット数以上の精度は出ない。
たとえば、分数を扱う処置系で、{1,3}==1/3 だと、0.333333333333・・・
を「正確に」表現出来るわけだが、このへんはどうなの?

0379デフォルトの名無しさんNGNG
実数と有理数の違いぐらい覚えとけ
0380デフォルトの名無しさんNGNG
>>378
精度というのはそういう意味じゃないよ。

その処理系では sin(x) も求めないし、√x も求めないの?
0381デフォルトの名無しさんNGNG
一桁ずつ十進数で保持&筆算法式で計算
しておけば何桁の計算だろうが誤差なんて出ないよ
0382デフォルトの名無しさんNGNG
はいはい
一生√2計算しといてくれ
0383デフォルトの名無しさんNGNG
【誤差】 真の値との差
【精度】 精密さの度合。誤差の大きさで表現する。

>>378
 8bit/8bitの分数で表現したとして 1/1024をどう表現出来ますか?
 分数でも、精度はそのビット数以上には出ないのです

>>381
 10進数かどうかに関係なく、無限ビットを扱うなら、誤差は出ませんね 
0384名無し@沢村NGNG
浮動小数とは、波間に漂うように小数の値が固定さず変動していることからついた名前だ。
つまりある意味乱数のようなものだな…。
乱数を発生させるには浮動小数は便利だが、科学技術計算には向かない。
値の信頼性がまったくないからね…
0385デフォルトの名無しさんNGNG
浮動少数表現は 対数表現と固定少数表現の良いとこ取り。

ダイナミックレンジが広く、掛け算が計算し易いのは対数表現並
整数の表現能力は固定少数表現並
0386デフォルトの名無しさんNGNG
>>384
無茶苦茶やな。
0387KingMathematician ◆5lHaaEvFNc NGNG
Re:>>384 ネタにしても酷すぎるぞ。
0388デフォルトの名無しさんNGNG
マジレスすると、科学技術計算の必要精度はせいぜい3〜4桁
ぐらいじゃないのか?通常の使用においては。

論文に書く時は精一杯精度を確保するだろうが。
0389デフォルトの名無しさんNGNG
>>388
君の国の「科学技術」というのは学校教育だけを指す言葉かな
0390デフォルトの名無しさんNGNG
結果に求められる精度が3〜4桁である場合、最低でもその2倍程度の精度が無いと。
例えば、自乗和を取る時など、簡単に桁落ちしてしまう。
統計では差の差を用いる事も多いしね。
0391デフォルトの名無しさんNGNG
>>390
誤差を最小にする演算は科学技術計算では既に確立している
わけだが。
0392デフォルトの名無しさんNGNG
>391
桁を落ち「にくく」するだけであって、3〜4桁の精度の計算で、
3〜4桁の精度の結果が得られるわけでは無いだろう?
0393デフォルトの名無しさんNGNG
>>390
>結果に求められる精度が3〜4桁である場合、最低でもその2倍程度の精度が無いと。

これ本気で言ってる?浮動小数点の演算方法知ってる?浮動小数点
における「有効桁数」というのは上位から何桁が正しいかを表している
のであって、演算時に必要な精度は元の数値の精度で十分。

例えば二乗が2倍の精度が必要なら、その論法で行くと3乗は3倍
の精度が必要なのか?平方根を取る時は半分の精度でいいのか?

あなたの言っている事は多分「精度」ではなく「丸め誤差」に関する
事だと思います。あまりにも大きさが異なる2数の加減算で問題に
なる事です。乗算、除算ではあまり問題となりません。

まあ、いいんだけどね。
0394デフォルトの名無しさんNGNG
>393
乗算でも計算結果の方が誤差範囲は広がるぞ。

例えば誤差範囲±5%の数字 a, b を掛けるとき、最悪の場合で
真の値より5%多い値が a, b に収まってるわけだけど
そのとき a * b の計算結果は真の値の 11.03% になる。

確率誤差範囲だとしても同様。
0395デフォルトの名無しさんNGNG
>394
真の値より 11.03% 大きい(ずれた)値になる。
0396デフォルトの名無しさんNGNG
>>394
まだ言ってるのか。
「有効桁数」と「誤差範囲」は全く意味する所が違うんだが。
数学の「信頼度」の事を言っているのか?統計という言葉が
たくさん出てくるのは。
0397デフォルトの名無しさんNGNG
http://pc2.2ch.net/test/read.cgi/tech/1076610073/
0398デフォルトの名無しさんNGNG
>>393
>390で、「自乗和」とか、「差の差」と言ってるのは無視か?
0399デフォルトの名無しさんNGNG
>393
精度・有効桁数と丸め誤差・桁落ちが関係無いと?
まるっきり無知では無いようだが、
コミュニケーション能力に問題有りか?
0400デフォルトの名無しさんNGNG
>>398>>399
無視してないだろ。加減算の際の丸め誤差や積み残しは
2数の大きさが違いすぎる時に問題になると>>393でちゃんと
書いてるだろ。君の目は節穴か?

IEEE754の規格書をしっかり読んだ事があるのか?英語が
読めない?じゃあJIS規格でも読んどけ。
0401デフォルトの名無しさんNGNG
それでは聞くが、4桁の精度が求められる場合、
自乗和の差を計算するには何桁の内部精度が必要かね?

2数の大きさが違いすぎる時は考慮しなくて良いが、
4桁の内で違うのは、「違いすぎる」とは呼ばない。
念のため。
0402デフォルトの名無しさんNGNG
「自乗和の差を計算する」って、いったい何を計算したいの?
式で出してみ
0403デフォルトの名無しさんNGNG
質問に質問で答えるのはよくないな。
まあいいか。
自乗和ってのは知ってるよな?分散とか標準偏差で使うあれだ。
つまり、上で言ってるのは、分散の比較だ。

つうか、IEEE754を知ってるなら、例えば64bitの数の演算には
64bit以上の精度が必要なのは知ってても良さそうなものだが。
0404デフォルトの名無しさんNGNG
>>401
必要な内部精度は5桁でしょう。最後の桁は丸めに使用する。
要するにn桁の精度が必要ならばn+1桁の内部精度があれば
よいのであって、最小桁にしか誤差が混入しないと数学では
考える。

それと機械イプシロンの問題は全く別だが。例えば1E100に1
を足しても16桁精度があったとして1は全く無視される。
0405デフォルトの名無しさんNGNG
>>403
ちなみに>>402さんは俺じゃないよ。
0406デフォルトの名無しさんNGNG
だんだん見えてきた。
>>393=400氏は、IEEE754に準拠したライブラリやFPUの「ユーザ」としての発言かな。
ブラックボックスとして使うのが普通で、内部処理を知る必要は無いな。
ビジネスソフト板ならいいんだが、プログラム技術板では叩かれるよ。
0407デフォルトの名無しさんNGNG
>>406
というかさ、単なる「浮動小数」では議論も何もできないでしょ。
今はIEEE754を例に取ったけど、全く別のフォーマットでも
話の本質は同じだと思う。

もしIEEE754が叩かれるなら、一般的な浮動小数点として話
を進めればいい。その代わりかなり話題は狭くなるよ。
0408デフォルトの名無しさんNGNG
例えばIBM方式では2進数ではなくて16進数で計算する。
その分処理速度は速くなるが、有効桁数がIEEEに比べて
4ビットほど短くなり、さらに倍精度の際の指数部が8ビット
で固定されているなど、問題もある。確かにオーバーフロー
は起こしにくいが。
0409デフォルトの名無しさんNGNG
なるほど。
指数・仮数の配分の好みは人それぞれだね。

精度を追求するなら>>1の言うように指数無し多倍長だし。
0410デフォルトの名無しさんNGNG
>>409
浮動小数点という表現形式は現実的なコンピュータのハードウェア
の制約の中で、数学的な有効桁数を保ちつつ計算ができるように
考えられた形式だからね。

常にデータ型の消費スペースが一定という性質が寄与するものは
大きい。浮動小数点型の配列が容易に作れる事の有り難みを知ら
ない人が意外と多い。

それはそれで置いといて、多倍長計算もこれまた面白いね。UBASIC
を触った人は結構いると思う。速度や効率は度外視して純粋に有効
桁数だけが必要な場合このような言語が非常に役立つ。
0411デフォルトの名無しさんNGNG
UBASIC32バージョンを作ってほしいなあ。今ならもっと高速で
多大な有効桁数を持つBASICなど容易に作れるはず。

今ではJavaやMathematicaがあるからその必要はないのかも
しれないが。
0412デフォルトの名無しさんNGNG
>浮動小数点型の配列が容易に作れる事の有り難みを知らない人が意外と多い。


ジャグ配列なら各要素のデータ長など関係なし
0413デフォルトの名無しさんNGNG
メモリ消費量も関係なし

というより、関知せず か。
0414デフォルトの名無しさんNGNG
イノセンスそれは…


猪木
0415デフォルトの名無しさんNGNG
猪センス
0416デフォルトの名無しさんNGNG
プロデューサが勝手につけたんだよな
0417デフォルトの名無しさんNGNG
分度器を見ろ。
同じ直角なのに、無理数(π/2)radでも、自然数(180°)でも、
表現できてるぞ!

浮動小数が、有理数や無理数や一部の十進数を
有限桁で表現できないなんて、別にど〜ってことない話なんだよ。
しょせんどこかで人間同士の都合やエゴがぶつかったまでの話。

このレスからは人間抜きで計算科学を語ろうぜ!
さらば人間!ようこそ計算機!
0418デフォルトの名無しさんNGNG
2を見ろ。
同じ2なのに、無理数(2^√2)でも、自然数(2)でも、
表現できてるぞ!

浮動小数が、有理数や無理数や一部の十進数を
有限桁で表現できないなんて、別にど〜ってことない話なんだよ。
しょせんどこかで人間同士の都合やエゴがぶつかったまでの話。

このレスからは人間抜きで計算科学を語ろうぜ!
さらば人間!ようこそ計算機!
0419デフォルトの名無しさんNGNG
> 同じ2なのに、無理数(2^√2)でも、自然数(2)でも、
すいません 2^√2 はどうみても 2 にならない気がするんですが。
0420デフォルトの名無しさんNGNG
√2^2だろ
0421デフォルトの名無しさんNGNG
それ以前に直角が180度って
誰かつっこんでやれよ...
0422デフォルトの名無しさんNGNG
>>420

√2^2 は無理数じゃないだろ
0423デフォルトの名無しさんNGNG
420 名前:デフォルトの名無しさん[sage] 投稿日:04/03/23(火) 22:57
√2^2だろ

421 名前:デフォルトの名無しさん[sage] 投稿日:04/03/24(水) 12:23
それ以前に直角が180度って
誰かつっこんでやれよ...


422 名前:デフォルトの名無しさん[sage] 投稿日:04/03/24(水) 12:36
>>420

√2^2 は無理数じゃないだろ

423 名前:デフォルトの名無しさん[sage] 投稿日:04/03/25(木) 13:42
引き算は怖いよな。




誤差が一気に増加する恐れがあるから。

424 名前:デフォルトの名無しさん[sage] 投稿日:04/03/25(木) 14:20
引き算で誤差は増えてないでしょ。 有効桁数が減る場合がある=桁落ちでしょう。

425 名前:デフォルトの名無しさん[sage] 投稿日:04/03/25(木) 15:37
桁落ち=誤差の発生じゃないか?

426 名前:デフォルトの名無しさん[sage] 投稿日:04/03/25(木) 15:52
精度0.01 有効桁3桁の数の引き算 1.01 - 1.00 = 0.01

有効桁は 1桁
精度は0.01で変化していない。
0424デフォルトの名無しさんNGNG
427 名前:デフォルトの名無しさん 投稿日:2004/03/25(木) 19:33
変に64ビットとかで切るから誤差が出るんだろ
すべての桁を十進数で計算すれば問題なし


428 名前:デフォルトの名無しさん 投稿日:2004/03/25(木) 20:35
>>423
非正規数モードにしとけば、
とりあえず異なる数値の差が0になることはありえないよね。


429 名前:デフォルトの名無しさん 投稿日:2004/03/25(木) 20:45

じゃあ 掛け算で誤差はどうなるか判る?

1.01*1.01=1.0201 有効桁は5桁になった? Yes /No


430 名前:デフォルトの名無しさん 投稿日:2004/03/25(木) 22:27
>すべての桁を

永久に計算が終わりませーん!
0425デフォルトの名無しさんNGNG
431 名前:デフォルトの名無しさん 投稿日:2004/03/26(金) 09:26
>424
絶対誤差は2倍ですむが、相対誤差は1兆倍とかできるぞ。
で、数値計算の分野ではただ誤差といった場合原則として相対誤差。


432 名前:デフォルトの名無しさん 投稿日:2004/03/26(金) 09:58
言いたい事は
 相対誤差 a% の cos(x) から sin(x)を cos(x)から求めると、このsin(x)は相対誤差a%を確保出来ない
というような事例だろう。

sin(x)=√(1-cos(x)*cos(x))
sin(x)=cos(x-π/2)
でも 引き算が含まれているからね


433 名前:オブジェクト指向促進運動 投稿日:2004/03/26(金) 14:20
三角関数はtangentを連分数展開するのが一番高精度なんだよ
sin, cosもtanだけで計算してだ。



434 名前:デフォルトの名無しさん 投稿日:2004/03/26(金) 14:29
0 <= x <= π/2 で f(x) = 1-cos(x) を 0.0001% 相対精度で計算しろと言われたら?
0426デフォルトの名無しさんNGNG
今月の日経サイエンスに出てた「クルタ計算機」、かっちょえ〜。
ttp://www.nikkei-bookdirect.com/science/page/magazine/0406/computer.html
これで掛け算もできるってことは、浮動小数なの?
0427デフォルトの名無しさんNGNG
>>426
美しいでつね。
モノツクリできる人は羨ましいな。
0428sageNGNG
×浮動小数
×浮動小数点
○浮動小数点数
0429デフォルトの名無しさんNGNG
全部読んだけど、勝手に誤差がでるとか言ってる奴がいますね。1年前だけど。
なんでそんな誤解が広まってるんだろう。
ある浮動小数点演算と他の浮動小数点演算で結果が異なるのは当たり前とか
言う奴もいるし。結果が異なるのは実数演算と浮動小数点演算だろ!
(丸めモードが違うとかもあるけど)

そういう奴は一回FP演算器を設計すべきだと思います。エミュレータでもいいけど。
0430デフォルトの名無しさんNGNG
浮動小数点数は不動小数点を持つし、
固定小数点数は浮動小数点を持つ ってワインバーグが嘆いてたな。
0431デフォルトの名無しさんNGNG
そして俺は山のフドウ
0432デフォルトの名無しさんNGNG
Sun 社製の C コンパイラには、浮動小数点演算中にコンテキストスイッチが発生すると丸めモードが変わるコードを吐くオプションがあったと思うが、これは一体何の役に立つんだ?
0433デフォルトの名無しさんNGNG
>429
ある浮動小数点演算と他の浮動小数点演算で結果が異なるのは当たり前
これは当たり前。Intel系は中で80bit演算してたりするから(オプションで制御できるがする奴は少ない)。
0434デフォルトの名無しさんNGNG
>>433
違う計算をして違う答えを出しているだけだろ。
浮動小数点の問題ではない。

できる奴が少ない=誤解が広まっている とも言えるな。
0435デフォルトの名無しさんNGNG
そんなに計算の仕方で結果が変わるのが嫌だったら浮動小数点を使うのを
一切諦めてBCD演算使え。
0436デフォルトの名無しさんNGNG
>434
違う計算になるのが問題なんだってば。
そりゃ、「同じ計算」したら答えは同じだろうな。「同じ計算」なんだから。ソケ4Pentiumはさらに例外だが。

同じ計算にするのがなかなか容易ではないから、C99とかJavaとか工夫しているわけで。
Fortran は知らない。

IEEE754の全機能をCで普通に扱えたらラクなんだけどな、ホント。
機種ごとにアセンブラで書き直したら「同じ計算」かの検証が大変だ。
0437デフォルトの名無しさんNGNG
>>435
議論の本質がわかってない。
0438デフォルトの名無しさんNGNG
>>436
広く使われている事実上の標準である所のプログラミング言語において、
注意深く使わないと間違うのはよろしくないという主張はひとつの考え方だとは思う。

しかし、このスレの先頭100レス位を読むと、そういうレベルでもないような
誤解があるように見えるが。
0439デフォルトの名無しさんNGNG
お前が読みすぎなだけ
0440デフォルトの名無しさんNGNG
だからBCDだけ使えば良いじゃん
0441デフォルトの名無しさんNGNG
>>440
だからバカが BCD 使うと、ますます結果が変わるんだって。
Java の BigDecimal クラス見てみぃ。丸めモードが8つもあるんだぞ。
こんなのバカ同士で使いこなせるのか?
バカの使う BCD よりはバカの使う IEEE754 の方が害が少ないだろうな。
最強なのは自覚の無いバカが使う BCD だが。
0442デフォルトの名無しさんNGNG
進化したコボラーなんだから、放置しろって
0443デフォルトの名無しさんNGNG
>>どっかのレス
>金利計算で誤差が出ないなんてのも迷信。
>1%複利で100年 利子が幾らになるか誤差無く計算出来るのに何桁必要だと思うんだ?

 BCD なら誤差はでない。なぜなら、およそ現代のほぼ全ての国において金利等の約款は
10進数を用いて記されていて、BCDならその約款にあるとおりの計算を行うことができるから。
古代エジプトで計算機が発達していたら、60進数をベースにした演算ライブラリが必要だった
だろうけど。
0444デフォルトの名無しさんNGNG
>>136
> 有理数クラスの hashCode() はどう実装したもんでしょうかねぇ。
> やはり戻り値は (分子).hashCode() ^ (分母).hashCode() なんてとこでしょうか。
> でも 1/3 と 2/6 の hashCode() はどちらも同じ戻り値を返したい気もする。

おれだったら分数クラスのhashDode()はJakarta Commons Langを用いてこう実装するぜ。
org.apache.commons.lang.builder.HashCodeBuilder
http://www.jajakarta.org/commons/lang-2.0/ja/withoutPrimary/org/apache/commons/lang/builder/HashCodeBuilder.html

public int hashCode() {
 // you pick a hard-coded, randomly chosen, non-zero, odd number
 // ideally different for each class
 return new HashCodeBuilder(17, 37).
  append(分母).
  append(分子).
  toHashCode();
 }
0445デフォルトの名無しさんNGNG
Jakarta Commons Langを使うんなら、俺だったらこうするな。

public int hashCode(){
 return Fraction.getFraction(分子, 分母).hashCode();
}
0446デフォルトの名無しさんNGNG
>>327
それはどうかな。
1(10)=1(2)とするのが問題で、最小単位を合わせないと、
0.01(10)=0.01(2)と取るのが普通で、1.00(10)=11001.00(2)

>>443
だから、2進でやろうが、10進でやろうが、
有限小数である限り、整数演算に帰着できるから、
加減乗算では、誤差は出ないの。
でも桁シフトで計算量増えるから、このワザは固定小数限定。
逆に言えば、除算や累乗根では、誤差が出るともいえる。
とすると、その部分だけ2進→10進変換して計算し、結果をまた2進に戻せば差はでない。
0447デフォルトの名無しさんNGNG
>>446
>0.01(10)=0.01(2)と取るのが普通で、1.00(10)=11001.00(2)
の意味が判らない。もう少し詳しく説明してくれないか?
0448デフォルトの名無しさんNGNG
>>446の後半

>とすると、その部分だけ2進→10進変換して計算し、結果をまた2進に戻せば差はでない。
それって BCD 演算のことでは・・・・
メモリやDBにまで BCD で入れておく必要はないって主張?
0449デフォルトの名無しさんNGNG
普通に全桁BCDで計算していけば誤差なんて出るはず無いじゃん
0450デフォルトの名無しさんNGNG
>>449
精度が問題なのであって基数の問題ではない。
既出だったはず。
0451デフォルトの名無しさんNGNG
誰かさ、BCD厨が一発で黙るようなテンプレ書いてくれない?
相手するのいいかげんくたびれた。
0452デフォルトの名無しさんNGNG
金融系の人>>449
科学技術計算の人>>450
分かってない人>>451
0453デフォルトの名無しさんNGNG
こんなのでいいか?テンプレ。 >451

Q1. BCDだと誤差出ないよね?
A1. ではBCDで1÷3を計算してみよ。

Q2. IEEE754 が 1÷10 を正確に表せないのはけしからん。
A2. 1÷3 を有限桁で表せない10進数もけしからんよね。

Q.3 とにかく浮動小数は誤差が出るって聞いたんだい!
A.3 だからといってBCDに誤差が出ないわけではない。

Q.4 キー!でも浮動小数の誤差の出方はわかりづらいだろ!
A.4 BCDの誤差の出方よりわかりやすいという職業の人もいる。

Q.5 BCDをバカにするな!金融をバカにするかぁ技術者さんよぉ!
A.5 あなたの被害妄想。

続く…
0454デフォルトの名無しさんNGNG
金融では割り算しない限りBCDもちゃんと意味があるって書いておいたら?
0455デフォルトの名無しさんNGNG
金融証券保険等、計算のルール自体が10進数で
決められている場合にはBCD演算を使うのが
シンプルで分かりやすい、ってことだよね。
0456デフォルトの名無しさんNGNG
シンプルで分かりやすいじゃなくて、誤差がない(割り算除く)
0457デフォルトの名無しさんNGNG
IEEE754も誤差出ないよ(演算する場合を除く)
0458デフォルトの名無しさんNGNG
基礎知識

コンピュータの中では、小数値は以下のように表現されています。
 ± A × B ^ C (A,B,Cは整数)
Aは仮数、Bは基数、Cは指数と呼ばれます。

基数には普通 10 または 2 が使われ、数値型ごとに決まった値になっています。
「10進数の 0.1 を正確に表現できない」というのは
基数が 2 である場合に起こる現象です。

指数がある決まった値しかとれないものを「固定小数」、
それぞれ可変の値をとることができるものを「浮動小数」と言います。
ただし、指数が可変というだけでなく、基数が 2 であることも条件に入れて
「(狭義の)浮動小数」と言ったり、IEEE754の規格に沿った数値表現のみを
「(IEEE754)浮動小数」と言うこともあります。

BCDというのは仮数部分の表現方法の一つです。(一応、BCDを指数や基数の表現に
使うこともできるが、普通そういうことはしない。)
BCDの場合は基数には普通 10 が使われますが、BCDでなくても基数が 10 であれば
10進数の 0.1 などを正確に表現できるため、金融計算に用いることができます。
0459デフォルトの名無しさんNGNG
1.BCD は誤差が出ない
2.BCD は「ある規約で取り決められた値」との誤差がでない

この区別をきっちりつけてくれ。
0460デフォルトの名無しさんNGNG
Q6. バーカバーカ!誤差の許されない分野にBCDが使われてるよ!
A6. 本当なの?じゃあBCDを正しく理解できている優秀なSEに感謝しましょう。

Q7. でもでも誤差の許されない分野にBCDが使われてるよ!
A7. しつこいね。BCDを使うと誤差を許さなくなるわけではないよ。

Q8. オーゥワタシ、メソポタミアジンデース。ニポンジン10進スキネー。ナゼ?
A8. 祖先から伝えられてきた日本の美しい伝統だからです。
0461デフォルトの名無しさんNGNG
1÷3が表現できなければ基数を3にすればいいじゃない。
0462デフォルトの名無しさんNGNG
全桁をBCDで保持/演算すれば誤差なんて出るわけ無いじゃん
0463デフォルトの名無しさんNGNG
>>462
メモリ足りないし。計算終わらないし。w
0464デフォルトの名無しさんNGNG
>>462
まずは円周率と自然対数の底を保持する仕組みを考えようかw
0465デフォルトの名無しさんNGNG
>>463
そこで遅延評価ですよ。
0466デフォルトの名無しさんNGNG
>>465
ならば 1 / 3 * 3 をメモリを食いつぶさずに遅延評価してくれ。
0467デフォルトの名無しさんNGNG
そこで分数ですよ。
0468デフォルトの名無しさんNGNG
円周率はおよそ3なので無問題です
0469デフォルトの名無しさんNGNG
>>466
何桁目が必要なのか言ってもらえれば書きます。
0470デフォルトの名無しさんNGNG
>>469
この怠け者め
0471デフォルトの名無しさんNGNG
>>469
1 / 3 * 3 の小数第1位は何ですか?
0472デフォルトの名無しさんNGNG
>>471
9
0473デフォルトの名無しさんNGNG
誰か十進数「0.1」を二進数、誤差無しで出して
0474デフォルトの名無しさんNGNG
>>471
0
0475デフォルトの名無しさんNGNG
ラジアン変換にならって、これから円周率πは整数180とすることにしよう。
0476お仕事探していまつ ◆y3A2MadQ16 NGNG
>>475
2のべき乗分の1は2進表現の浮動小数表現でも指数部のビット数ある限り正確なんで、
円周率を介在させずに1/2π×fとしてfで角度を表すという提案はある。これは360度で4.0になる。
記憶違いでなければその提案に準拠した三角関数がsinhp()などの名前で
IEEEの標準にも追加されたように思う。

実はC++でちょっと工夫すればそれを実現するラジアン型みたいなものが作れて
それを使えばインターフェースは従来どおりのまま
入力xに関するπ倍の誤差を排して周期性が保たれた三角関数が実現できる。

>>378
基数3の浮動小数点表現なら小数部はたったヒトケタで1/(3^n)もバッチリw。

ちなみに前にも書いたかもしれないけど浮動スラッシュなる有限精度有理数の体系も提案されてるよ。
分子と分母の桁数合計を一定に保つってやつ。
論文は何年も前から積読状態なので今ここで特徴とか書けないけど。
(実は昔、数式処理システムで有限精度数を扱うという課題に対して利用できるかもしれないと
論文をコピったはいいが結局多倍精度の浮動小数点数を実装することになって放置に…。)
0477お仕事探していまつ ◆y3A2MadQ16 NGNG
ちょっと脱線だが、C++のテンプレート・メタ・プログラミングを利用して
コンパイル時にdoubleやfloatの計算ができるライブラリを作ってみた。

取り敢えずはコンパイル時計算によるFFTの最適化という自分の研究のために作ったので
今のところ四則演算と整数との変換とsinhp()の計算しかまだ実装してないし、
丸めは直近だけだしNaNとか非正規化数とか実装してないんだが…。
ちゃんと整備したら使う人いそうかな?
0478デフォルトの名無しさんNGNG
>>477
>コンパイル時にdoubleやfloatの計算ができるライブラリを作ってみた。

イメージが湧かねぇ・・・
概略を教えて。
0479デフォルトの名無しさんNGNG
C++のtemplate駆使するとフィボナッチ数列もコンパイル時に評価できるらしいが正直どうでもいいや。
そういや昔Perlでヘッダ出力するスクリプト作ったけどそんなんで十分だな。
0480デフォルトの名無しさんNGNG
>>477
公開キボン。ゲーム屋なんで使うこともあるかもしれん。
0481お仕事探していまつ ◆y3A2MadQ16 NGNG
>>480
実際に公開するとなると整備しないといけないことはまだまだ多かったりしますが・・・。

・namespaceをちゃんと使う。
・名前の整理(わかりにくい命名を直す。)
・floatをちゃんとテストする(実はdoubleが必要だったのでfloatは雑にしかテストしてない。)
・sin()以外の初等関数の実装。
・丸めモードの実装
・NaNや非正規化数の実装
・g++×Windows×x86環境以外で動かすテストと修正(ポケット・マネーではつらい予感。特にx86以外のプロセッサ。)
・64bit整数型がない環境への対応(多分これがプログラミング作業的には一番面倒)
0482お仕事探していまつ ◆y3A2MadQ16 NGNG
>>478
template<typename prec, int sign, int exp, typename fraction>
  struct StaticReal{
  static const int s = sign;
  static const int e = exp;
  typedef fraction f;
};

って感じです。

precは精度を指定するテンプレート・パラメータです。
(doubleとかfloatとかを指定します。)

小数部をあらわすfractionが基本型でなく
typedefになっているのはIEEE準拠のdoubleの実装には
64bitを超える結果を返す正確な整数演算が必要だったため、
それもクラス・テンプレートで実装する必要があったからです。

具体的な各浮動小数点数値はこのテンプレートの特殊バージョンとして与えられます。
0483お仕事探していまつ ◆y3A2MadQ16 NGNG
>>482の続き
計算はa,b,xが上記のように定義されたテンプレートの特殊バージョンを表すtypedef名だとすると。

AddStaticReal<a,b>::result

とか

SinhpStaticReal<x>::result

のように実行します。結果もテンプレートの特殊バージョンのtypedef名です。
なので「値」を変数に覚えておくには

typedef SinhpStaticReal<x>::result r;

のようにします。typedefなんで代入はなしで初期化のみ。

FromStaticReal<r>::get()

とやると対応するdouble型の値が得られます。
0484お仕事探していまつ ◆y3A2MadQ16 NGNG
>>483
で静的メンバ関数get()を実行するまではどんな「浮動小数点演算」もコンパイラが計算しますから
実行時の立場から見れば単に整数定数だけを含むクラス定義の集まりということになります。
get()はその整数定数から実行時に浮動小数点型doubleやfloatの値を組み立てます。

ちなみにsinhp()は>>476で述べたような多少仕様にヒネリのあるsin()関数です。
0485デフォルトの名無しさんNGNG
cppll のアプロダでも使えば?
0486デフォルトの名無しさんNGNG
>>485
cppllって
http://www.freeml.com/ctrl/html/MLInfoForm/[email protected]
のことですか?

「アプロダ使えば?」というのは何の話ですか?
0487デフォルトの名無しさんNGNG
それであっちょるけど、それは cppll の "ML"(本家)。
↓このへんに逝きんしゃい。

[cppll あぷろだ]
ttp://www.cppll.jp/upload
[cppll BBS]
http://jbbs.shitaraba.com/computer/5651/cppll.html

うまくアップロードできんかったら BBS の雑談スレか障害状況スレで相談しなされ。
0488デフォルトの名無しさんNGNG
>>481でも書いたようにいろいろ不備があって辛うじて動くという状態なので
公開するのは恥ずかしいレベルですが:
 ttp://www.nerimadors.or.jp/~kando/FFTemplate/index.html
のRealTemplateが問題のソースです。
0489デフォルトの名無しさんNGNG
3.4e+30とかの大きな数を浮動小数点表現に変換する場合も内部では
2進数(多倍長整数とか)に変換してから仮数部に入るだけの上位桁 + 指数
を求めてるの?
0490デフォルトの名無しさんNGNG
>>489
ベストな答(0.5ulp以内)さえ求められれば必ずしも全桁をわざわざ求めないのが普通と思う。
平気で数ulpずれた答を返す処理系も結構多そうだが…(どっかのscanf()とか)
10進→2進変換の仕様もIEEE754で言及していたはず。
0491デフォルトの名無しさんNGNG
リテラルの二進変換の精度って、昔調べたことがあるけど
誤差0.5ulp以下なんてことは全然なかった
教科書に乗ってるような非常に適当な二進変換ロジックをつかってる模様
ごく最近の処理系は、調べたことないけど
0492デフォルトの名無しさんNGNG
jpgの実用化って、昔調べた事があるけど
展開が10秒未満ってことは全然なかった
展開が非常に重いアルゴリズムを使っている模様
ごく最近の事情は、調べた事が無いけど
0493デフォルトの名無しさんNGNG
>>466
1/3*3と入力すると自動的に通分して1を返すようにすればいい。
これにはオブジェクト指向が必須だ。
Apache Jakarta Connmons Math のFractionクラスのように
0494デフォルトの名無しさんNGNG
浮動小数だってさ(嘲笑激藁
0495デフォルトの名無しさんNGNG
> A1. ではBCDで1÷3を計算してみよ。

BCDで有理数クラスつくりゃ問題ないだろと思ったがシラネ(゚�听)
0496デフォルトの名無しさんNGNG
IEEE754の正規数モード時のゼロへのフラッシュって、
正規数の最小値を少しでも下回ったらゼロに丸められるのかな。
それとも正規数最小値の半分を下回ったときかな。
0497デフォルトの名無しさんNGNG
>>495
有理数ごときでBCDなんざ贅沢なんじゃヴォケェ
君程度の人間には整数二つで十分
0498デフォルトの名無しさんNGNG
>>497
boost::rationalもBCDじゃないしね。
0499デフォルトの名無しさんNGNG
hosyu
0500デフォルトの名無しさんNGNG
誰か「おれはこんな凄い計算してるんだぞ」てな自慢でもどうぞ。
0501デフォルトの名無しさんNGNG
float と double の値について標準入力から入力し、
その内部表現を
「符号, n * (2 ^ e)」
という形で表示するプログラムを作って下さい。
0502デフォルトの名無しさんNGNG
>>491
遅レスだけどSchemeやその他いくつかの言語では、
William D. Clinger "How to Read Floating Point Numbers Accurately"
のアルゴリズム(または同等の性能のもの)を使うことになっている。

この論文によると、
IEEE754では変換時の誤差が0.5 unit以下でなくても良い事になっているらしい。
0503デフォルトの名無しさんNGNG
遅レスさんくす
それって、どんな内容ですか?
さわりだけでもお願い
0504デフォルトの名無しさんNGNG
すまん。俺も読んでないのでくわしい事はわからない。
ひろい読みしてみた感じだと、

10進浮動小数点表記の数をそれに一番近い2進浮動小数点数に変換する事は
固定精度の演算だけでは行えない。
でもいつも多バイト整数演算を使って変換するのでは効率が悪いので、
多くの場合では多バイト整数演算を必要とせず
でも必ず最良の値に変換するアルゴリズムを示します。

みたいな内容だと思う。

ちなみに>>502で書いた「同等の性能のもの」というのは、
効率の話ではなく、最良近似値に正しく変換するって事ね。
0505デフォルトの名無しさんNGNG
多バイト整数演算
と
多倍長整数演算
はどうちがうのですか?
0506デフォルトの名無しさんNGNG
>>505
それぞれの定義を書いてくれたら教えてあげる。
0507504NGNG
>>505
多バイト整数 多倍長整数 bignum
どれもごっちゃに使ってて区別した事ないや。
違いってあるのか。
0508デフォルトの名無しさんNGNG
>>507
多倍長整数が普通じゃない?
多バイト整数って、int32 も多バイトやんか。
0509デフォルトの名無しさんNGNG
http://pc5.2ch.net/test/read.cgi/tech/1101931660/
0510デフォルトの名無しさんNGNG
まあ、数値の計算精度で悩みたくなければ、素直にFORTRANを使えってことでFA?
0511デフォルトの名無しさんNGNG
integer, parameter :: k = selected_real_kind(p=10,r=300)
real(kind=k) :: a
0512デフォルトの名無しさんNGNG
だから〜

BCDで全桁演算/保持すればいいだけでしょ
0513デフォルトの名無しさんNGNG
BCDはおそい&メモリの無駄
0514デフォルトの名無しさん05/01/25 02:47:00
浮動少数点表現のパラメータ
仮数桁・基数・切捨ての有無を出力するプログラムって書ける?
もちろん実行環境によって結果が違うように。
0515デフォルトの名無しさん05/01/25 03:09:36
浮動少数点表現には規格がある。
実行環境によって結果が違ったらこまるだろ。
0516デフォルトの名無しさん05/02/01 11:25:11
float の 精度をはかるのに
float a=1;
float e=1;
while a<>a+e
e=e/2;
end while;

何語かわからん書き方だか
こんなやり方があった

昔の数値演算のライブラリは
このeを基にして、機械ごとの浮動小数点の
精度の差を考慮して書かれていた。

キーワードは machine epsilon
0517デフォルトの名無しさん05/02/02 01:13:50
>514

基数を求めるのは難儀だなぁ。
1 を 3 で割って 3 かけたらまた 1 になるなら、基数は 3 進数か?
でも 6 かもね。
0518デフォルトの名無しさん05/02/02 01:29:55
16で割って16掛けたら戻るからといって、基数が2か16かわからんよなぁ
0519デフォルトの名無しさん05/02/02 01:30:43
http://www.openexr.com/

16ビット浮動少数なんてのがあるぞー。
0520デフォルトの名無しさん05/02/03 15:47:33
>>517-518
そりゃ素因数分解と同じで最小のものを出力すれば医院で内科医?
0521デフォルトの名無しさん05/02/03 18:04:35
たとえば、2進と16進の違いを調べようとしたとしても
結局演算では、丸め誤差以外は違わないわけで
丸め誤差の違いで判断するしかない

可能ではあるが、難しい
0522デフォルトの名無しさん05/02/03 20:26:52
質問ぬ
float m = -0.00001;
while(1){
printf("%f,0x%08x\n",m,m);
m*=0.01;
Sleep(1000);
}
実行すると
-0.000000と0.00000000 が存在するんだが
16進で見ても両方とも0x00000000 なんだが
どう見分けてるの?

あと、有名な水面演算で、少し触った後、放置してると
急激にCPU食う時があるよ。
浮動小数同士の演算って速度が重くなる演算ってあるの?
この場合の演算は、掛け算と 足し算しかやってません。
0523デフォルトの名無しさん05/02/03 21:43:23
-0と+0はビットパターンが違うはずだけど。つーかfloatを%xで読むって
動作の保証があったっけ?

Denormal Numberが出てくると計算が遅くなると思う。物によってはソフト
エミュレーションになったりするし。
InfやNaNは遅くなるかなあ。(×と+ではNaNは出てこないか)
0524デフォルトの名無しさん05/02/03 22:01:03
floatを引数にしたら、doubleに格上げされて、
たいがいは8byteになってしまうから、
0x%08xだとその半分しか見ていないことになる。
0525デフォルトの名無しさん05/02/03 23:27:58
Infは、無限大
NaNは、ありえなーい (/0)
Denormal Numberって規格外数値?
規格外ってなんだよ
Denormal Numberでググっても54件しか出ないし
0526デフォルトの名無しさん05/02/03 23:29:40
doubleに格上げされても
floatの実態は4Byteなんでそ。
謎だ。

(int)*((int*)(&m)) で調べてみたほうがいいのかしら
または、デバッガで目盛り見るの
0527デフォルトの名無しさん05/02/03 23:31:23
denormalized number
0に非常に近い数字
精度を落として、指数を確保しているとおもいねえ
0528デフォルトの名無しさん05/02/03 23:32:07
おいおい、doubleに格上げされたら、
printfには、どこからどう見てもdoubleにしか見えんのだよ。
0529デフォルトの名無しさん05/02/03 23:36:05
とにかく、ビットパターンを見たければ
>>526のようにしろ
0530デフォルトの名無しさん05/02/03 23:36:57
ちなみに、-0.0は0x80000000で、+0.0は0x00000000
0531デフォルトの名無しさん05/02/04 10:14:25
異なる環境で結果の一意性を保証できない事を「誤差」と表現する人がいるのが混乱する原因か
0532デフォルトの名無しさん05/02/04 10:56:50
だれがそう表現した?
0533デフォルトの名無しさん2005/04/29(金) 22:55:19
保守
0534デフォルトの名無しさん2005/05/28(土) 19:06:26
>>526

組み込み用のライブラリとかだと
double = float
のこともあるよ(取説に明記してあると思う)。
0535GreatFixer ◆ASWqyCy.nQ 2005/05/28(土) 21:36:25
float型変数の値の容量は処理系依存だろうと推測してみる。
floatを使っているのにやたら精度が良かったりするという話はどれだけ知られているのだろう?
0536デフォルトの名無しさん2005/05/29(日) 08:18:05
>>535

IEEE754があるから処理系依存にはならないかと思う。
0537デフォルトの名無しさん2005/05/29(日) 12:00:29
全ての処理系がIEEE754に準拠しているとは限らない。
というかしていない。
0538デフォルトの名無しさん2005/05/31(火) 10:08:29
1.0 は 3F 80 00 00 だ。
0539デフォルトの名無しさん2005/06/18(土) 11:29:35
>>538
IEEE754準拠ならそのとおりだが、で?
0540デフォルトの名無しさん2005/06/18(土) 11:54:43
誰も long double の存在には気づいていないようだな。
0541デフォルトの名無しさん2005/06/18(土) 12:55:13
REAL(SELECTED_REAL_KIND(30)) の存在には気づいている。
0542デフォルトの名無しさん2005/07/25(月) 19:10:10
他の板で質問したところ板違いと言われ、ここにたどり着きました。
ここの住人の方々ならとけると思い、質問させていただきます。

問
π = 3.141592・・・ をIEEE単精度表現すると出てくる 32bit のものを
16 進数で表現せよ。

この問題が解けなくて困っています。どなたか出来る方お願いします。
0543デフォルトの名無しさん2005/07/25(月) 20:23:33
>>542
#include <stdio.h>
#include <math.h>
int main()
{
float a=atan(1)*4;
printf( "%08x\n", *(long*)&a);
return 0;
}
0544デフォルトの名無しさん2005/07/25(月) 20:41:52
>>543のような手もあるけど、10進表現された小数をIEEE浮動小数点表現に変換する
一般的なアルゴリズムを書くのは結構大変だよ。

toIEEE round_mode sig_bitsize exp_bitsize n = ...?
0545 ◆LLLLLLLLL. 2005/07/25(月) 21:55:21
浮動点小数と言ってしまうのは俺だけですか、そうですか・・
0546デフォルトの名無しさん2005/07/25(月) 22:55:56
>>543
残念だが atan(1)*4 の時点で 3ulp ほど相対誤差が出るかもな。
Java なら java.lang.Float.floatToRawIntBits( java.lang.Math.PI ) で一発。
0547デフォルトの名無しさん2005/07/25(月) 23:28:27
>>543
参考になるかしら。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/799.c
0548デフォルトの名無しさん2005/07/25(月) 23:32:18
ちゃんと見てないけどDoubleToFloatで
NaNや+0,-0,+∞,-∞は保存されているのだろうか。
05495462005/07/25(月) 23:53:16
>>546
よく考え直したが atan(1)*4 で精度低下は多分起こらないわ。IEEE ならね。
0550デフォルトの名無しさん2005/07/26(火) 00:53:41
>>548
面倒だからWindows依存だけど対応してみたわ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/800.c
0551デフォルトの名無しさん2005/07/26(火) 19:39:44
> x += pow( 0.5, 23 );// 丸め
これでround to nearest evenになってるの?
0552デフォルトの名無しさん2005/07/26(火) 21:04:12
なってないので直してみたわ。チラシの裏でスマソね。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/807.c
0553デフォルトの名無しさん2005/07/26(火) 21:05:42
なってないから直してみたわ。チラシの裏でスマソね。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/807.c
0554デフォルトの名無しさん2005/07/26(火) 22:12:31
>544の言ってる意味がよくわかった。面倒なんだな。
0555デフォルトの名無しさん2005/07/26(火) 22:18:08
ちょっと修正。これで電卓でもIEEEが求め(ry
〜/808.c
0556デフォルトの名無しさん2005/07/26(火) 23:43:23
素晴らしい。ところで非正規化数の処理はok?
0557デフォルトの名無しさん2005/07/27(水) 01:02:13
今対応したわ。なんか疲れたわ… 〜/809.c
0558デフォルトの名無しさん2005/07/27(水) 01:20:09
たぶん最後。 〜/810.c
0559デフォルトの名無しさん2005/07/27(水) 06:34:27
お疲れ〜。プログラム板で珍しい生産的なやりとりでしたね。
0560デフォルトの名無しさん2005/09/17(土) 19:42:41
質問です
浮動小数点で余り(といって良いのか)を求める良い方法ってないですかね

例えば、2.4 ÷ 1.1 余り0.2

て感じです
いまは割った数を整数変換して元の数から引いてるんですが、
これですと、乗算と除算を使ってしまう上に型変換を2回も行なうので
コストが気になります
もっと他にいい方法がありそうなのですが・・・

ちなみにプログラムで書くとこんな感じ

double a = 2.4;
double b = 1.1;
int c;
double ans;

c = a / b;
ans = a - b * c;
0561デフォルトの名無しさん2005/09/17(土) 20:00:44
fmodと比べてみて判断したら?
0562デフォルトの名無しさん2005/09/17(土) 20:07:16
型変換が嫌なら丸めなり切捨てをすればいいんじゃないの?

で、2.4/1.1 = 2.1818181818181818 では?
0563デフォルトの名無しさん2005/09/17(土) 21:22:46
これまでの浮動少数は間違っていました以下のように訂正してください。
浮→不
で、いいんじゃね?
0564デフォルトの名無しさん2005/09/18(日) 10:33:14
型変換が嫌なら桁落ちさせれば?
0565デフォルトの名無しさん2005/09/19(月) 05:01:26
563はワインバーグのネタですね。浮動小数点数は不動の小数点を持つし、
固定小数点数は浮動の小数点を持つ。 木村泉の名訳で知ったのですが、
たぶん英語でも面白いジョークに聞こえる表現なんでしょうね。
0566デフォルトの名無しさん2005/09/19(月) 07:02:53
いや、つまんねえし
05675632005/09/19(月) 07:48:55
いや、そんな知識ねえし
0568あぼーんNGNG
あぼーん
0569デフォルトの名無しさん2005/12/09(金) 22:15:21
236236+P 真空浮動少数
0570デフォルトの名無しさん2005/12/18(日) 05:26:21
不動小数
0571デフォルトの名無しさん2006/04/02(日) 03:23:29
hoshu
0572通りすがり2006/04/05(水) 09:20:09
むかしむかし、コンピュータは自然数しか扱えなかった。

そんなコンピューターでは引き算が出来ないから、
計算機屋が頑張って負の数も扱えるようにした。
こうして、ゲタ履き表現と2の補数表現が出来た。

ゲタ履き表現は足し算引き算のときにゲタを戻さなければいけないので少し面倒なので、
2の補数表現のほうがメジャーになった。

天文学者・物理学者がコンピュータを使いたくなった。

 天文学者:アンドロメダまでの距離はXXX kmで、星の数はYYY 個なんだよ!
 物理学者:世の中は全部クォークで出来てるんだ。クォークの電荷はXXX クーロンなんだぜ。

二人のニーズに対応するために、計算機屋はあれこれ考えた末、浮動小数点数というのをひねり出した。
数学の指数表現をコンピュータで表現仕様という試みだ。
これは苦労の末なんとか実現して、天文学者と物理学者は大喜び。

それを見ていた金融業者も同じようにコンピュータに金融計算をさせようと思った。

 金融業者:僕と同じように筆算して。

計算機屋は金融業者の計算を見て頭を抱えてしまった。
金融業者は10進数で計算をするため、誤差の丸めも当然10進数基準なのだ。
コンピュータは2進数しか分からない。電気のオンオフしかないから。
しょうがないから計算機屋はBCDを作った。苦肉の策だ。

金融業者は自分でやるのと同じ答えを導き出すコンピュータを得られて大満足で帰っていった。
0573デフォルトの名無しさん2006/04/05(水) 09:23:04
オチ。




固定小数出すの忘れた。
0574デフォルトの名無しさん2006/04/06(木) 06:57:00
 
0575デフォルトの名無しさん2006/04/07(金) 05:23:20
 
0576デフォルトの名無しさん2006/04/10(月) 17:25:12
金融計算も、浮動小数点で1000倍とか1万倍した値で計算させればいいんだよ

例えば1.3% の利子は 1.013だけど、千倍して 1013として浮動小数点で掛け算した後で 1/1000すればいい。

というか最近の言語で金銭型を扱うというのは、だいたいこの方式だ
0577デフォルトの名無しさん2006/04/10(月) 18:48:24
複利で100年後の利息教えてください
0578デフォルトの名無しさん2006/04/12(水) 18:56:36
ふと気になったのだが

double(64bit floating point)型が64bit integerのすべての値を正確に表現できる

ことはどうやって証明すればよい?帰納法?
0579デフォルトの名無しさん2006/04/12(水) 19:09:21
残念だけど 2^62-1 とかの値は64bitの浮動小数点型では表現出来ないという結論になりそうだよ

ところで
2038年問題は結局どうやって対処したのかな 64bit浮動小数点で表現する事にしたんだっけ?
0580デフォルトの名無しさん2006/04/12(水) 19:14:15
>>576最近の言語は
ほんまかよ。
0581デフォルトの名無しさん2006/04/12(水) 19:28:14
OLEのCURRENCY型は64bit整数型を 10,000 倍した表現だね
                   ~~~~
0582デフォルトの名無しさん2006/04/12(水) 22:27:43
つまり、>>570はデタラメですね
0583デフォルトの名無しさん2006/04/12(水) 23:27:49
>>578
単純に仕組みを考えても、
>double(64bit floating point)型が64bit integerのすべての値を正確に表現できる
できるわけがない。
0584デフォルトの名無しさん2006/04/12(水) 23:30:52
んだんだ。
なんしろdoubleの仮数部は53bitしかねえもんな。
64bit intでの、54bit〜64bitの長さの奇数は全部反例。
0585デフォルトの名無しさん2006/04/13(木) 07:00:44
もしかして偶数しか使わなければよくね?
0586デフォルトの名無しさん2006/04/13(木) 07:05:16
2^62+2 もダメでしょ
0587デフォルトの名無しさん2006/04/13(木) 15:29:01
1ビットのびるだけだろ、意味がない。

大体、64ビットの全パターンが整数値に対応してんだから。
浮動小数の、64ビット整数の値域に含まれる分のパターン数なんてたかが知れてるわな。
0588デフォルトの名無しさん2006/04/13(木) 16:01:18
IEEE倍精度(64bit)の全ビットパターンの内、((2^52)-1)*2個もの値がNaNに割られているのはナンとかナンないかと思うぞ。
0589デフォルトの名無しさん2006/04/13(木) 18:36:59
>>578
64bitでなく、

 double(64bit floating point)型が32bit integerのすべての値を正確に表現できるか?
 またその証明方法は?

だったら自明でない問題になるかも。

0590デフォルトの名無しさん2006/04/13(木) 18:55:08
仮数部ビット数が遥かに長く、
指数ずらしなしで整数をそのまま表現出来る以上、
できるに決まってる。
0591デフォルトの名無しさん2006/04/15(土) 12:40:23
Pentiumなんかは浮動小数点ユニットは80bitじゃないか
0592デフォルトの名無しさん2006/04/15(土) 12:58:59
その事実が何を示すのか分からんな。
事実に対して何の推論も意見も持たないなら書き込む意味は無い。
0593デフォルトの名無しさん2006/04/15(土) 13:14:17
>>591
FPUの方はね。

EM64Tは128bitのXMMレジスタが16本有るんだから
四倍精度も扱えるようにしてくれればいいのに。
0594デフォルトの名無しさん2006/04/16(日) 04:16:24
>>593
誰が使うんだよ、そんな精度をw
0595デフォルトの名無しさん2006/04/16(日) 05:04:32
>>594
FORTRANでは言語仕様の中にあるので、ハードウェアでサポートしていた
方が便利かもしれない。ま、科学技術計算をx87でやろうという酔狂も
少ないだろうが。

http://homepage2.nifty.com/tadakazu/opendoc/fpu_x87.html
0596デフォルトの名無しさん2006/04/16(日) 10:29:16
HPC分野でXeon/Opteronでクラスタ組んで数値計算
というのなら需要は有る。

#Xeonで四倍精度をサポートしちゃうと Itanium 2の立場がないが
0597デフォルトの名無しさん2006/04/16(日) 16:52:46
AMDのK8Lというやつが、サポートしないかなあ・・・
0598デフォルトの名無しさん2006/04/26(水) 19:37:33
>>572
>>計算機屋は金融業者の計算を見て頭を抱えてしまった。
>>金融業者は10進数で計算をするため、誤差の丸めも当然10進数基準なのだ。
>>コンピュータは2進数しか分からない。電気のオンオフしかないから。
>>しょうがないから計算機屋はBCDを作った。苦肉の策だ。

ここが理解できないのですが。
どのみちこの時代は浮動小数が32ビットかもっと少ないでしょ。
とすると、当然多倍長にしないと足りないわけで、
いや精度が必要なところは64ビットが使えても多倍精度を使うのは常識だろう。
8倍の256ビットでやるとして、100ビット目がずれることはありうるのか(10^5-6回程度の演算で)。
カオス演算でもさせないかぎりずれないだろ。
金融演算がカオス的ならどのみち10進でやろうが意味ないしな。
0599デフォルトの名無しさん2006/04/26(水) 20:04:07
金融じゃ浮動小数点つかわねえだろ
0600デフォルトの名無しさん2006/04/26(水) 21:38:11
金利があるじゃん
0601デフォルトの名無しさん2006/04/26(水) 21:59:27
為替レートも銭刻み
0602デフォルトの名無しさん2006/04/26(水) 22:38:50
金融系で浮動小数点数での実装など見たことない。
0603デフォルトの名無しさん2006/04/26(水) 23:24:46
固定小数点にきまってんだろ
0604デフォルトの名無しさん2006/04/26(水) 23:33:37
というか10進演算。
0605デフォルトの名無しさん2006/04/26(水) 23:44:22
>>598
現代のたいていの法律の条文や契約書では、
様々な計算を行う際に10進数で計算するように書かれている。
BCD にしないと、消費税の計算ですら法律通りの数字が出せない。

同じ理由で昔のエジプト人やメソポタミア人は60進法演算のできる
コンピュータを使っていた。
0606デフォルトの名無しさん2006/04/27(木) 00:15:33
どんなコンピュータ?
そろばんみたいなやつとか?
06075982006/04/27(木) 00:26:01
>>605
>>BCD にしないと、消費税の計算ですら法律通りの数字が出せない。
すまないが、現在の法律の計算方法と、
正しい計算結果が出ない"反例"を挙げてくれないかな。
06085722006/04/27(木) 01:30:56
君ら暇だな('ー`)大好きだぜ。

2進表現で問題になるのが、ドル表記で、セントが無限小数になること。
それを嫌がった金融屋がBCDなんてボケなモノを作らせたんだろう。
つうかBCDのメリットは「0.1問題」が解決するだけ。他のメリットなんて+αだ、オマケだ。
それでIntelが何をトチ狂ったかBCDをハードウェアで実装しちまったんだよ。
ぶっちゃけソフトウェアで固定小数点数表現したほうが100倍もましなんだがな。
当時はCPUもそれほど早くなかったから仕方がないな。

目的に合わせてビット表現も変えるのがプロの計算機屋/プログラマ。
それに理解を示さないボケな古狸が金融業界には多い。それだけ。
0609デフォルトの名無しさん2006/04/27(木) 01:33:37
悪いがつまり何が言いたいのかさっぱり分からん。
0610デフォルトの名無しさん2006/04/27(木) 01:41:16
レス早いなー。
簡単に言ってみよう。

BCDは要らない子だったんだよ。
0611デフォルトの名無しさん2006/04/27(木) 02:46:32
おじさんは BCD 便利だから使ってるよ。
表示する時楽だからね。
四則演算くらいアホの子みたいに書いても今なら問題ないし。
いちいち2進10進変換するより、BCD のみのほうが楽なこともあるのよ。
おじさんゲーム屋なんだけどね。
若者は多倍長整数とか分数表現とか使えばいいんじゃないの?

で、2進固定小数点数で 0.1 を表現するの?
それとも、印字の時に小数点を打つって話?
0612デフォルトの名無しさん2006/04/27(木) 03:34:14
0.1を表現する話は、小数点の固定、浮動にかかわらず0.1は近似表現しか出来ないという話です。
BCDなら誤差なく表現できますが、それ以外にメリットは無いだろうというのが私の主張です。
そこで、

・何故BCD以外だと表示が不便なんですか? (BCDは便利、に対しての質問)
0613デフォルトの名無しさん2006/04/27(木) 03:39:42
固定小数点なら0.1は近似じゃないだろ?
0614デフォルトの名無しさん2006/04/27(木) 05:43:56
>>612
0 から 9 までのそれぞれの数字に、画像をマッピングしたら、
BCD ならば、それぞれの桁がまさしく画像へのインデクスだ。
非常に楽チン。
おじさんは10桁以上になるものは BCD でやってる。楽だから。
表示の時に10進変換するのが楽なら、それがいい。
多倍長から直接10進出力するメソッドを定義するのが楽なら、
そうすればいい。
おじさんは頭固いから。

・10 点加算する時も 10h 加算するとするなら、全く変換の必要が無いよ

>>613
小数点位置は 2 進で表さないのか? 固定なのに.。
0615デフォルトの名無しさん2006/04/27(木) 06:45:19
>>612  0.1だけなら浮動小数点でも10倍しておけば問題ないよ

>>613 2進数固定小数点といってるのは 小数点位置をどこかに取るから近似になってしまうよ
   10倍表現、100倍表現なら問題ないよ

>>614 別のおじさんは桁数多いなら100進数を良く使うといってし、別のオジサンは1万進数を使うといってた
0616デフォルトの名無しさん2006/04/27(木) 11:28:33
>固定小数点なら0.1は近似じゃないだろ?

2進数って知ってるか?w
0617デフォルトの名無しさん2006/04/27(木) 11:45:34
1==0.999・・・ が正しいなら 無限桁あれば表現出来るよ
0618デフォルトの名無しさん2006/04/27(木) 19:12:42
>>614
なるほど、納得です
非常に限定された使い道ですが、それも有りかもしれませんね。
10という数によほどこだわらないとBCDは有用になりえないのは変わりませんね。
0619デフォルトの名無しさん2006/04/27(木) 19:18:45
いやー、そもそも0.1が近似であろうがなかろうが、たとえば浮動小数でやって真の値0.1との誤差をeとしよう。
冪乗がすでに近似演算しか不可能だからどうしようもないのでは。
乗除算でも大きな打切り誤差が発生するだろ。
ここで真の値とオーダーeの誤差が発生すれば結局一緒ではないか。
0620デフォルトの名無しさん2006/04/27(木) 19:27:07
>>619
BCD は誤差なく常に「真の値」で演算を行うので、
その考察は見当違いですよ。

ビジネスで行う演算は、たいていがどこで四捨五入するとか、
どこでどう切り下げるとかが契約や法律で定められていて、
常に正しい値が得られるようになってます。
(契約書や決算書に約3円とか書かないでソ、普通)

で、そういう計算の際の決まりは大抵10進数で記述されているので、
計算機内で n * 10 ^m (n, m は整数) が正しく表現できれば、
誤差なく実装することができる。
0621デフォルトの名無しさん2006/04/27(木) 19:32:56
なんかもう堂々巡りだな……。
0622デフォルトの名無しさん2006/04/27(木) 20:14:10
BCDといっても、無限に小数点以下を用意してるわけではないので
たとえば少数以下4桁とか固定サイズ持ってるわけだ。

だったら、浮動小数点でも固定小数点でも 1万倍して持つという規則を作ってやれば全く同じ事。

演算子オーバロードが出来る言語なら、BCDを実装するよりも簡単で高速に実現出来る。
0623デフォルトの名無しさん2006/04/27(木) 20:50:44
#浮動小数点でも固定小数点でも 1万倍して持つという規則を作ってやれば全く同じ事。
個人の妄想

#BCDが使われている
揺ぎ無き現実
0624デフォルトの名無しさん2006/04/27(木) 23:05:38
>>620
だから、あんたのほうこそ約じゃなくて誤差を定量的に測れと言っているんだ。
例えば、10/3=3.3333で四捨五入で計算すると法律で記述されているから真の値で計算されているとは言わないぞ。
本当にム板かここは、理論的に数値計算での誤差の上界を求めたり、
実際に計算機上で実験して、誤差の統計的分布はどうなっているとか調べずに、
(計算量のコストも考慮すべきだが)
確かめもせずにどこかに書いてあった知識を鵜呑みにして、
オウムみたいにBCDBCD言っているだけではだめだ。
0625デフォルトの名無しさん2006/04/27(木) 23:18:00
数学的に正しい値 ≠ 法律的に正しい値
0626デフォルトの名無しさん2006/04/27(木) 23:33:38
>>625を認められないキモヲタ>>624カワイソス
0627デフォルトの名無しさん2006/04/28(金) 01:22:44
つうか環境に用意されてる10進演算機能や型を利用するのが普通だろ。
わざわざ自分で実装しなけりゃならんことのほうが少なくないか?
と思ったがもともとビジネス用途じゃない言語では用意されてなかったりするか…
それでもライブラリとかはありそうな気がするが…
0628デフォルトの名無しさん2006/04/28(金) 03:25:51
現実問題、FPU倍精度で2^53までの整数は厳密に扱えるのだし、
ソフトさえ整備されればFPUの方が速いだろう。たとえ100桁が厳密に必要でも。
あ、普通に整数レジスタ使うという手もあるな。
まあ、今のソフトでいいならBCD使ってもいいけどな。
0629デフォルトの名無しさん2006/04/28(金) 04:45:17
mov al, 06h
mov bl, 09h
mul bl
aam
0630デフォルトの名無しさん2006/04/28(金) 10:53:52
百桁も何も
1÷3で破綻するんですけど
0631デフォルトの名無しさん2006/04/28(金) 11:37:50
>>624は人間社会に出ると存在価値が無くなる院生
0632デフォルトの名無しさん2006/04/28(金) 12:42:38
>>630
判ったよ。 だったら10倍ではなく60倍して持つことにしよう
0633デフォルトの名無しさん2006/04/28(金) 12:52:48
>>632
1÷7はどうしましょう?
0634デフォルトの名無しさん2006/04/28(金) 13:01:01
>>627 BCD型がある言語はCOBOL程度しかないのでは?

Currency型というのは、多くは10000倍された64bit固定小数点型の事だ
money型は100倍された固定小数点型
Decimal 型は 128bitの10のベキの浮動小数点
0635デフォルトの名無しさん2006/04/28(金) 13:15:57
某8bit機のBASICはBCDだった・・・。
0636デフォルトの名無しさん2006/04/28(金) 15:28:10
>>633
で、複素数型を改良してA/Bで表現する有理数型を作った後で

じゃ√2はどうしましょう? と聞かれてギャフンと
0637デフォルトの名無しさん2006/04/28(金) 15:59:07
BCDはコボラー専用。
0638デフォルトの名無しさん2006/04/28(金) 18:01:14
ああ、だから環境に用意されてる10進演算用の型って言ってる。
BCD表現かもしれんし、別の表現かもしれん。
いずれにしても、自分で実装することは少ないんじゃない?って言ってる。

0639デフォルトの名無しさん2006/04/28(金) 19:26:23
全部の桁使えばいいじゃん
0640デフォルトの名無しさん2006/04/28(金) 19:32:50
不動小数、 なーんつって
0641デフォルトの名無しさん2006/04/28(金) 20:27:00
>>639

[1][÷][3][=]っと

先生!永久に終わりませんorz
0642デフォルトの名無しさん2006/04/28(金) 20:45:49
堂々巡りはもう飽きた。 他にネタはないのか?
0643デフォルトの名無しさん2006/04/28(金) 20:52:10
>>641
それは 分母と分子の2つの数を覚えておけば解決するぞ
0644デフォルトの名無しさん2006/04/28(金) 22:41:52
>>643
>>636 と、ついでに >>642
0645デフォルトの名無しさん2006/04/28(金) 23:25:47
数式を覚えておく数式型を作ればいいじゃん
0646デフォルトの名無しさん2006/04/29(土) 00:12:40
>>645
有限の数式の解にはならない数を超越数と呼ぶ。
πとか自然対数の底eとかな。
それはどうするのかね。
0647デフォルトの名無しさん2006/04/29(土) 00:30:15
piはpi、eはeでよくね?
0648デフォルトの名無しさん2006/04/29(土) 04:41:33
>>618
非常は言いすぎだろ。
おじさんはゲーム屋だから聞いただけだけど、
組み込み屋は今でも 7 セグ表示に 4bit マイコン
使ったりするらしいぞ。
一般消費者に10進で提供するのが「よほどこだわる」
ことなのか?
0649デフォルトの名無しさん2006/04/29(土) 09:43:27
今のプロセッサなら2進に変換してから演算し、また10進に直したほうがはるかに高速です。
確かに処理系が貧弱な組込系はそうする必要があるかもしれませんが、
それは非常に限定的な使い道には違いないでしょう。
ユーザーインターフェイスは10進で提供するのは当然ですが、
内部表現まで10進にするというのは何かこだわりが無い限りやらないと思います。
0650デフォルトの名無しさん2006/04/29(土) 10:01:12
今のといっても、それは値段しだい。

結局除算がどれだけ高速かによるんだよ。

除算命令を持ってないCPUなら10進や100進は内部形式として普通に使われる
その理由は2進10進変換のコストが非常に大きいからさ。
0651デフォルトの名無しさん2006/04/29(土) 10:13:39
そして、パソコン以外のCPUでは除算命令は持っていても、とても遅い。
たとえば、今月号のインターフェースにSH2のチップが付いているが
これは組込用としてはリッチな方の環境(同じ会社のM16やH8に比べて)
それでも除算は何サイクルもかかる。

まあSH2は掛け算が高速だから、
10進変換の場合の10で割った余りは
掛け算2つと引き算で代用出来るとしても、それでも重いよ。
多桁となると100進数・万進数を採用した方が高速だ。

と
書けば、そんな少しの高速化より、開発効率云々という話をしたくなるだろうが
組込用、特に電池駆動のシステムでは
実行サイクルは電池を消費する故に、少しでも実行効率を上げる事の方が重要な事となる。
0652デフォルトの名無しさん2006/04/29(土) 11:36:24
だからそういうニッチな環境は一般的でなく限定的な場合じゃないのかと。
まぁ非常にってつけたのはノリだったから謝る。
0653デフォルトの名無しさん2006/04/29(土) 11:49:20
だから、一般的環境って何よ?

いっぱん‐てき【一般的】
 1.或る部類のものに共通であるさま。普遍的。
 2、或る部類のものの大部分に共通であるさま。

大多数の職業プログラマはWindowsプログラマだが
ソフトウエアを必要とする環境の殆どでは除算は遅いのが一般的だよ。
0654デフォルトの名無しさん2006/04/29(土) 12:03:36
計測機器にもBCD信号出力が付いてるのが結構あるなからなぁ。
0655デフォルトの名無しさん2006/04/29(土) 15:21:50
結局何が言いたいんだ?
0656デフォルトの名無しさん2006/04/29(土) 15:49:54
BCDネタはもう秋田
0657デフォルトの名無しさん2006/04/29(土) 17:54:32
>>645
いまそれ作ってるw
0658デフォルトの名無しさん2006/04/29(土) 18:29:11
>>657
√(5 + 2√6) = √2+√3
とかの分解もがんばって実装しる。
0659デフォルトの名無しさん2006/04/29(土) 21:35:05
計算しなければ誤差は発生しないという真理
0660デフォルトの名無しさん2006/04/29(土) 21:47:08
実際ケーキを3人で分けるのに永久に割れませんとかコントやる馬鹿はいないわけよ
浮動小数点で80bitもあればそれでいいのよ
0661デフォルトの名無しさん2006/04/29(土) 23:46:04
数とケーキは違うから。
0662デフォルトの名無しさん2006/04/30(日) 00:22:17
場合によりけりですな。
小数点の9桁下の値が微妙にずれるだけで宇宙がひっくり返ってしまう人もいるわけで。
まったく気にしない人もいれば、誤差量がわかれば多少ずれてもいい人もいるわけで。
0663デフォルトの名無しさん2006/04/30(日) 00:56:27
ぶっちゃけ全ての答えはたった二桁の整数なんだからそれで十分。
0664デフォルトの名無しさん2006/04/30(日) 02:08:31
有効桁数の問題ではないのだよ。
0665デフォルトの名無しさん2006/04/30(日) 08:34:23
常に42を返せばok
0666デフォルトの名無しさん2006/05/01(月) 02:04:14
>>660
ケーキなんてのは水平にスライスするように切ればOK。



上側は嫁の分orz
0667デフォルトの名無しさん2006/05/01(月) 06:09:18
それなんて4コママンガ?
0668デフォルトの名無しさん2006/05/01(月) 09:07:20
嫁肥ゆる春
0669デフォルトの名無しさん2006/05/02(火) 14:30:17
牛丼食いきれないから半分食え、とまわってきた丼はご飯しか残ってなかったりorz
うな丼もカレーも同様。
0670デフォルトの名無しさん2006/05/02(火) 19:11:33
そんな君には俺のドーナツを半分上げるよ。
ただし俺が外周、お前は内側半分な。
0671デフォルトの名無しさん2006/05/02(火) 22:12:14
肉食べないから牛丼の飯とつゆと糸こんにゃくだけとか好物
0672デフォルトの名無しさん2006/05/03(水) 22:51:17
>>651
>10進変換の場合の10で割った余りは掛け算2つと引き算で代用出来る
ちょっと考えてみたけどわからんかった。
後学のために教えてくだちい。
0673デフォルトの名無しさん2006/05/04(木) 00:39:20
俺は>>651じゃないが、ハッカーズデライトに以下のような内容がある。

例えば32bitのとき。X / 10を以下のように変形する。
 X/10
= X * (2^33 + 3)/10 / 2^32
= (X * 0x66666667) >> 34

これで掛け算1回&シフト1回。
余りは上で求めた商から、掛け算1回&引き算1回で出せる。
この方法はシフトが遅いCPUじゃ使えんけど。

そもそもシフト使わないって言うなら、俺には分からん。
0674デフォルトの名無しさん2006/05/04(木) 00:40:26
しまった、間違えた。
× 2^32
○ 2^33
0675デフォルトの名無しさん2006/05/04(木) 09:35:50
>>673
一般的に、掛算結果はレジスタ2つで返ってくるものがおおい。
だからレジスタサイズに合わせてやればアセンブラレベルではシフトの必要は無い

たとえば32bitなら 01999999ah と掛け算して上位ワードを採用するだけでいい
0676デフォルトの名無しさん2006/05/05(金) 09:51:31
数値計算ガイド
http://docs.sun.com/app/docs?l=ja&q=&p=doc%2F806-4847
0677ゆきな2006/05/15(月) 22:09:35
浮動小数点数で教えてほしい事があるのですがいいですか?
0678デフォルトの名無しさん2006/05/15(月) 23:53:26
だめですぅ。
0679デフォルトの名無しさん2006/05/16(火) 05:40:28
どうぞ
0680デフォルトの名無しさん2006/05/16(火) 08:16:43
どっちやねん
0681デフォルトの名無しさん2006/05/24(水) 13:43:37
思うんだけど浮動小数で1000倍してから計算して戻せば
BCDはいらないという主張の正当性がどこまで妥当なんだろう。

1000倍してもアンダーフローが起きるときはさらに1000倍、
それでも足りないときはさらに1000倍なんてことを繰り返す?
するとどこかで今度はオーバーフローを起こしてしまいそうなんだけど。
その辺りを、誤差を落とさずに自動でやってくれるよう機能しているの?


BCDのほうがまだまだ確実のように見える。
0682デフォルトの名無しさん2006/05/24(水) 14:00:50
a=1*1000
b=3*1000
a/b

はい無意味

0683デフォルトの名無しさん2006/05/24(水) 14:02:35
1/3*3という式が現れたら、
コンピュータが正規化処理を実行して
先に3を約分してから結果的に1になるように処理をすればいいじゃないか
0684デフォルトの名無しさん2006/05/24(水) 14:02:45
自動通分だ
0685デフォルトの名無しさん2006/05/24(水) 14:05:01
自動約分、自動展開、自動因数分解、自動二重根号除去、自動平方
などなどをオブジェクト指向で実装できれば。
分数クラス、有理数クラス、無理数クラス、複素数クラス、などで。
0686デフォルトの名無しさん2006/05/24(水) 14:48:20
>>683
除算とか虚数とか、そのまんま扱えば幸せだお。
数値演算するから不幸なんだお。
0687デフォルトの名無しさん2006/05/24(水) 15:44:37
>>683
(/ 1 (* 3 3))
1/9

こんな感じ?
0688デフォルトの名無しさん2006/05/24(水) 15:57:18
if (1 + (1 / 100000000000000000000000000000000000) == 1) {

        糸冬  了

}
0689デフォルトの名無しさん2006/05/24(水) 16:08:17
>>681
小数点以下4桁のBCDでも1万倍の固定小数点でも1万倍の浮動小数点でも
その有効範囲の計算結果は同じ。

1/3 というような場合に小数点以下4桁BCDや1万倍固定小数点は
0.3333までしか答えが得られない が、1万倍浮動小数点なら その有効桁だけ求まる。
が、だからといって意味があるわけではない
0.33334 と 0.33336で四捨五入の方法を変えたい場合に浮動小数点から有利かどうかも
それも実装によってしまう。

オーバーフローやアンダーフローの問題は、どの方法でも起きるのだし
結局は、どの方法が楽かという問題でしかない。

ただ浮動小数点ならsin/cosから指数対数まで既に用意された関数が使えるというメリットがある程度かもな
0690デフォルトの名無しさん2006/05/24(水) 17:12:47
このスレで浮動小数点を否定しているのはネタだよな?
普通に考えてどの方法が楽かという問題でしかない。
0691デフォルトの名無しさん2006/05/24(水) 17:32:36
だからBCDで全ての桁を扱えばすむ話と何度言えば
0692デフォルトの名無しさん2006/05/24(水) 17:36:44
永遠に割っとけ
0693デフォルトの名無しさん2006/05/24(水) 18:25:24
なんか定期的に話題がループしとるな。
0694デフォルトの名無しさん2006/05/24(水) 20:31:46
うんこが生きてる間は出続けるのと一緒だろ。
0695デフォルトの名無しさん2006/05/24(水) 21:42:27
>>691がウンコというわけか
0696デフォルトの名無しさん2006/05/24(水) 23:12:53
式のまま扱えば良いじゃん♪
0697デフォルトの名無しさん2006/05/24(水) 23:18:02
まさに循環小数
0698デフォルトの名無しさん2006/05/24(水) 23:30:46
>>687
まったまった。
(1/3)*3 だろ。
だから結果は1になるべきということで。
0699デフォルトの名無しさん2006/05/24(水) 23:36:15
 ・
0.9

になるべき
0700デフォルトの名無しさん2006/05/24(水) 23:43:30
おまいら、アフォだろ?
0701デフォルトの名無しさん2006/05/24(水) 23:57:15
スレ違い
http://science4.2ch.net/test/read.cgi/math/1142173277/
0702デフォルトの名無しさん2006/05/24(水) 23:59:53
0.111…=1/9
0.222…=2/9
0.333…=3/9
:
:
0.999…=9/9=1
0703デフォルトの名無しさん2006/05/25(木) 00:12:41
1/3*3 は1になるべきで
1/(3*3) = 1/9じゃない
といいたいんだろ。
(1/3)*3なんて書いたら優先順位を変えたと勘違いされる。

約分のアルゴリズムを導入しろということだろう
0704デフォルトの名無しさん2006/05/25(木) 00:31:10
(* 3 1/3)
1

分数は分数のまま扱えば良いじゃん。
0705デフォルトの名無しさん2006/05/25(木) 01:11:35
19レスで循環した
0706デフォルトの名無しさん2006/05/25(木) 01:19:30
一応、約分してくれる言語っていくつかあるんだよね
MATLABとかでもなかったかな

式を微分したり積分したりできるやつ。

微分、積分してから値を代入するので、
数値微分や数値積分のような丸め誤差伝搬の心配がない。

0707デフォルトの名無しさん2006/05/25(木) 01:20:53
ここがそんな高度なレベルの話で議論してるとは思えんがな。
議論ですらないか。
0708デフォルトの名無しさん2006/05/25(木) 07:12:28
浮動少数って名前がそもそも
0709デフォルトの名無しさん2006/05/25(木) 15:38:46
>>689
ということは
有効桁数さえ足りれば今後は、
doubleやlong doubleだけで十分だということ? (もし足りなければ多倍長型JavaのBigDecimalなどを利用?)
けど、C/C++やJavaのdouble型は、内部でそういうことを
自動的に実行してくれる仕組みになっている?
Javaにはstrictfpという修飾子があるけど、これを使わないとだめとか?
0710デフォルトの名無しさん2006/05/25(木) 15:42:18
>>700
分数の計算なら、Fractionクラスを作ってどうにかなる。
微分積分については、まず変数クラスを作らないと。

MATLABのように
sym(x)

x = sin(x) + x^2

とやったあとで

diff(x)

とすると

cos(x) + 2 * x

が返ってくるようできるものをクラスで定義しなくては。
0711デフォルトの名無しさん2006/05/25(木) 18:55:14
ループしちゃいけないなんてローカルルールはないんだから
同じ話題が続いてると思ったら新しい話題を振るか、
それができないんなら黙って見てればいいんじゃないですか?
それとも住人の会話を邪魔して楽しむ新手の荒らしかなんかですか?
0712デフォルトの名無しさん2006/05/25(木) 19:15:53
循環小数がループしてるという話をしてるのではなかったのですか?
0713デフォルトの名無しさん2006/05/25(木) 23:57:36
>>711
じゃあ貴様のその書き込みの意図は何だ。
黙って見ているわけでもないし、
新しい話題を振っているようにも見えないが。

じゃあ新ネタ。
浮動少数点表現、固定少数点表現に変わる新たなビット表現を考えれ。
0714デフォルトの名無しさん2006/05/26(金) 00:00:59
んな無茶なw
0715デフォルトの名無しさん2006/05/26(金) 13:02:28
万能数値表現法 URR
http://homepage2.nifty.com/m_kamada/docsproc/asmurr.htm
0716デフォルトの名無しさん2006/05/26(金) 16:46:38
>>715
おもすれえー。
ちょっとためしに実装してみよう。
0717デフォルトの名無しさん2006/05/26(金) 16:52:24
プログラミングの為の数学と算数 vol.2
http://pc8.2ch.net/test/read.cgi/tech/1094368921/
0718デフォルトの名無しさん2006/05/27(土) 00:53:48
こりゃいい。
っつうかもっと早くそのネタ振ってくれよw
0719デフォルトの名無しさん2006/05/27(土) 01:16:56
絶対値が小さい程精度が高いって事かな
HWに実装するのはちょっとキツそう

C++やC#のクラスで作りたくなってきた
0720デフォルトの名無しさん2006/05/27(土) 01:38:53
>>719
むしろHWでやらないと意味無いでソ
0721デフォルトの名無しさん2006/05/27(土) 01:56:56
検索したら、HW実装してもIEEEのものより若干遅いってデータのPDFが見つかった。

それでも、IEEEじゃ満足できずにソフトウェアでハックすることの多いであろう
科学技術者にはHW実装のものも価値があるのかもしれないね。
0722デフォルトの名無しさん2006/05/27(土) 02:17:16
おもしろいし、一瞬すばらしく思えたが
よく考えりゃ、指数が足りなくて困ってる人以外には
実用的には価値ないな
0723デフォルトの名無しさん2006/05/27(土) 02:48:35
いま C++ のクラステンプレートで実装し始めてみたのだが、足し算からして実装がめんどくせぇ。(;´Д`)
0724デフォルトの名無しさん2006/05/27(土) 05:05:55
指数部の処理が厄介そうだよ
しかも有効数字可変という罠
07257232006/05/27(土) 05:53:34
>>724
最初、思いっきり間違えて実装しようとしてた。二重指数ってなんだよ、これ。
区間の比率が1:2を境に幾何平均か算術平均かをわける?
意味とかはもう正しく理解できたとは思うけど、この仕様、無茶苦茶だよ・・・
0726デフォルトの名無しさん2006/05/27(土) 06:51:09
数値を表現できただけで満足してて、
それを使って実際に計算することを考えていないのでは?
0727デフォルトの名無しさん2006/05/27(土) 07:13:29
複素数で対数化するのと、そう変らんように思うな。
昔 掛算が遅かった頃、FFTを実装するのにやった事があるが
0728デフォルトの名無しさん2006/05/27(土) 10:31:35
どうせ1/3で破碇するんだろw
0729デフォルトの名無しさん2006/05/27(土) 10:41:33
>>718
1/2 でも破綻してると思う
0730デフォルトの名無しさん2006/05/27(土) 11:08:06
6進数なら破綻しないぞ
0731デフォルトの名無しさん2006/05/27(土) 11:35:56
>氏は URR のことを過去の失敗作のようにおっしゃって多くを語っていただけなかったのが残念でした。

考案者もこう言ってるしなぁ。
0732デフォルトの名無しさん2006/05/27(土) 12:04:28
>数値を表現できただけで満足してて、
>それを使って実際に計算することを考えていないのでは?

漏れもそう思う
0733デフォルトの名無しさん2006/05/27(土) 12:54:06
>>728

10進数で全部の桁計算すればいいんでないの
0734デフォルトの名無しさん2006/05/27(土) 14:10:43
進数についてはこの際もう関係ないから蒸し返すな。
0735デフォルトの名無しさん2006/05/27(土) 17:53:41
2^32進数を使えば問題はすべて解決する。
0736デフォルトの名無しさん2006/05/28(日) 18:05:50
それだ!
0737デフォルトの名無しさん2006/05/28(日) 19:39:49
いや、何にも解決しないけどw
0738デフォルトの名無しさん2006/05/29(月) 00:35:02
以下何進数をつかっても無限少数になる数字が存在するって証明↓
0739デフォルトの名無しさん2006/05/29(月) 01:16:51
π進数というものがあるらしい
0740デフォルトの名無しさん2006/05/29(月) 01:20:44
π進数で0.1を表してみてください。
0741デフォルトの名無しさん2006/05/29(月) 01:35:09
π/(π+π+π+π+π+π+π+π+π+π)
0742デフォルトの名無しさん2006/05/29(月) 01:48:05
つまらん。
0743デフォルトの名無しさん2006/05/29(月) 02:39:53
>>739
radianのことか?
0744デフォルトの名無しさん2006/05/29(月) 02:48:37
radianはスケーリングっしょ。
進法とスケーリングは違う概念だと思うさ。

そういえばHacker's Delightに 1+i 進数があったな。
0745デフォルトの名無しさん2006/05/31(水) 22:16:44
まあその気になれば任意の実数進、複素数進の表記は可能なんだけどな。
数学板でそんなスレがあったような気がする。
0746デフォルトの名無しさん2006/05/31(水) 23:00:41
あらゆる数値は12345679の倍数で表現可能
0747デフォルトの名無しさん2006/05/31(水) 23:06:56
12345679 x 9 = 111111111
12345679 x 18 = 222222222
12345679 x 27 = 333333333
0748デフォルトの名無しさん2006/06/01(木) 01:26:39
12345679*n=m を満たす実数nが全ての実数mについて存在することを証明せよ。

trivial. ■
0749デフォルトの名無しさん2006/06/01(木) 01:41:34
次のネタまだー?
0750デフォルトの名無しさん2006/06/01(木) 07:41:01
複素数を対数化すれば虚軸は2πで循環するけどね
0751デフォルトの名無しさん2006/06/01(木) 08:02:21
嘘こけw
0752デフォルトの名無しさん2006/06/01(木) 10:14:41
>>751 こけ? こっこ?
0753デフォルトの名無しさん2006/06/01(木) 16:02:31
ttp://www.ee.t-kougei.ac.jp/tuushin/lecture/math1/htdocs/complex/log/

ttp://ja.wikipedia.org/wiki/%E8%87%AA%E7%84%B6%E5%AF%BE%E6%95%B0
0754デフォルトの名無しさん2006/06/06(火) 23:06:36
C++でURR実装してた人どうなった?
0755デフォルトの名無しさん2006/06/07(水) 00:36:26
めんどいからやめたんじゃ。
07567232006/06/07(水) 01:15:35
とりあえずいまんとこ保留。また気が向いたら続きをやろうかとは思ってるけど、
四則演算はいったんBCDにでも変換してから計算し、またURRに戻すって形になりそう。
とにかくなんらかの形のものができたら報告&公開することだけはお約束しておきます。
0757デフォルトの名無しさん2006/06/07(水) 01:52:55
>>756
変換する必要はないでしょう。
1ビット目が符号ビットで、
1ビット目と2ビット目が異なれば絶対値1以上。
2ビット目からk個同じビットが連続しているならばそこまでが指数部で2^2^(k-2)。
2ビット目と3ビット目が異なるなら指数部は2^0。
残りが仮数部。あとは浮動小数点の演算を行えばよい。
加算なら指数部のビット差がkなら2^(k-2)ビット仮数部をシフトして足す。
絶対値が1以上と1未満の加算の場合は、
2^(k-2)+2^(l-2)ビット仮数部をシフト。
指数ビットずらすから差が大きいとすぐに一方がゼロになる。
07587232006/06/07(水) 02:57:19
>>757
仮数部が幾何平均と算術平均が組み合わさったものにになるからそれだけじゃうまくいかんとですよ。
...でも、確かに言われてみるとちょっと難しく考えすぎてたかも。
0759デフォルトの名無しさん2006/06/07(水) 12:47:25
>>756
C++のかわりにJavaで実装してみればやりやすいんじゃない?
Javaのほうが型に厳しいからバグを見つけやすいという利点もあるし
0760デフォルトの名無しさん2006/06/07(水) 15:48:39
>>759
型に厳しいって表現は誤解を招く。
型の処理系依存が少ないというべき。
0761デフォルトの名無しさん2006/06/07(水) 18:07:49
アルゴリズム考える上では自分の脳内言語が一番いいよ。
そして紙とペン。
0762デフォルトの名無しさん2006/06/08(木) 00:16:47
>>760
> 型の処理系依存が少ないというべき。
すげ。好意的エスパー。
理由も結論もでたらめだったのに。
0763デフォルトの名無しさん2006/06/08(木) 05:07:55
>>762


>>759 は コンパイル通らない只のコーディングミスをバグと思ってるんだろうね
0764デフォルトの名無しさん2006/06/08(木) 18:03:49
お客さんだったらみんなそう思うに決まってるよ。
どんなものでも自分が予想できないものはなんでも
バグ扱い。それが顧客の対応。
0765デフォルトの名無しさん2006/06/08(木) 20:36:38
ルールを厳密にしてコンパイルではじくのは、バグの原因を減らすためでもあるし
コーディングミス≒バグと言えなくもない……かな?
0766デフォルトの名無しさん2006/06/08(木) 22:10:53
修正する必要のある項目は全部バグでいいじゃない。
0767デフォルトの名無しさん2006/06/08(木) 22:31:41
>>765
>ルールを厳密にしてコンパイルではじくのは、バグの原因を減らすためでもあるし

確かにそーゆー傾向はあるが、それはコンパイルエラーの本質じゃないだろ。
0768デフォルトの名無しさん2006/06/08(木) 22:43:31
で結局JavaとC++とどっちがいいの?
0769デフォルトの名無しさん2006/06/09(金) 00:54:00
その話題はそういうスレがあるような気がする、探してみれ。
0770デフォルトの名無しさん2006/06/09(金) 10:14:45
>>768
宗教戦争になるのでそういうことは自分の脳内で結論を出してくれ
07717232006/06/10(土) 04:49:14
いまさらな話だけど、件のWebページではURRでも「指数部」「仮数部」という言葉を使ってるけど、
IEEEのそれとは完全に別物として考えなきゃいかんね。
例えばIEEEなら「指数部」がどうであれ「仮数部」がゼロならその値はゼロと評価されるけど、
URRだとその値がゼロと評価されるのは「指数部」と「仮数部」がともにゼロのときだけだし。
0772デフォルトの名無しさん2006/06/10(土) 11:18:12
なかなか難しいでヤンスね。
0773デフォルトの名無しさん2006/06/10(土) 11:45:57
>>771
IEEE754の単精度と倍精度では、denormalのときしか仮数を0に出来ないけど。
0774デフォルトの名無しさん2006/06/10(土) 15:15:07
要するにデノーマル・無限・非数がない
0775デフォルトの名無しさん2006/06/10(土) 15:24:53
つうかURRって、0や無限は指数が無限大だから
指数部に0や1が延々続いて、仮数部はないんでないか?
07767232006/06/10(土) 21:09:50
>>773
ごめん、IEEEについて勉強不足だった。
仮数部の先頭には暗黙の1がつくんだね。
このへんはIEEEもURRも一緒だね。
0777デフォルトの名無しさん2006/06/15(木) 17:41:54
固定小数点演算
http://www2.muroran-it.ac.jp/circle/mpc/old/algorithm/cg/fixedpoint/fixedpoint.html
0778デフォルトの名無しさん2006/06/15(木) 17:48:00
>>777
そこイマイチ分かり辛いんだよな。回りくど過ぎて。
こういう簡単な概念では毎度の事だけど、ソースを読むのが一番分かり易い。
それと、『固定小数点数演算』の方が俺的にしっくり来る。
0779デフォルトの名無しさん2006/06/15(木) 19:58:46
同意
糞だよね、そこ
0780デフォルトの名無しさん2006/06/15(木) 20:13:03
MMXの後に浮動小数点のSIMDが来ると予想しないところが、
時代を感じさせるな。
0781デフォルトの名無しさん2006/06/15(木) 22:46:33
>>777
>Ver 1.00 : 1998/07/20(Mon) 18:00:00
K6-2が出たのは1998年3月28日。AltiVecが発表されたのが1998年5月。
Macに興味なかったとしてもこれはまずいっしょ。
AMDを舐めきってたか、Intelが対抗しないと予想してたんだろうか。
0782デフォルトの名無しさん2006/06/15(木) 23:04:51
そりゃあ今になってなら何とでも言えるだろう。
固定小数点の話を苦労して書いた後ならこのくらいは普通だと思う。
0783デフォルトの名無しさん2006/06/17(土) 22:34:03
            ____
         __,,/  _, ----`ヽ  :.
     :.  / _     ___   、\
       / /   i      \   \\ :.
     :. ,'./       i  ヽ:.   ヽ:.:.. ヽ.ヽ
      ,'/    / .ハ ヽ ヽ:.:.:.:. ヽ::.. ヽヽ :.
     :. |i .i i  .i /  ヽ ト 、 \、:.:.:. ',:.',:.:.lヽ}
       |i .i l  :N_, -弋 \弌弋ナ:}:.:}
    :. |i∧ ', :{ ,ィjモト \  イjミトイイV :.  な…
       .|  :メヽ.', `ozZ}      izN。ハ::{     なんなんですか?
      :. |  :ヾ_! ゝ "゙゙    '  `゙ ハ.:', :.   ここ、どこですか?
      |  :.:_イ .:.ヽ.   (二フ , イ :.:.:!:.ヽ     なんで壁にお尻付けると
   :.  / rィイ | :.:.ヽ: >r/`<ノ .:.::.}ヽ、\:.   前屈出来なくなるんですか?
      / ∧l;l ! :.:.:.://{二 ̄ .} ..:..::リ//ハ.:\
 :.  / .{. ',ヾ、ヽi .:.:.{ /(^`  |.:.:.:.//: : :.}: . ヽ.:.
   / /  ) ヽ ヾ、ヽ:.ハ ヤ{   ∧/.-‐'": : |:.:. i ',
  ./ .,イ .:..} : :\ヾレ'ハ ∧__ノノハヾ、  : : : l:.:.: .ハ ',
  { /| .:.:ハ : : :i Y {ヾ`Yヽニン'ノ}: : } : : : :/:.:.:/ }:.}
  V | .:.:/:.:|_,ィ' ̄  ヽ三{ `ー-ノ : イ : : :/:.:i.:{  リ
    ヽ:.:{、.:.V     : : ヘ     : : {: : :/:.::∧|
     ヽ! )人    : : :人      : : : / \! :.
      "  ヽ : : : : :/イ{     :.ノ: : : :.\ :.
       :.  \__///: :\______/: : : : : : : ヽ
           / //: : :|;|: : : : : : i: : : __: : : : ',
       :.     / 、 {;{   |;|   . : i/. : : : : : :|
          / `Y;{. . . .|;|. : : : /i: : : : : : : : :l
0784デフォルトの名無しさん2006/06/20(火) 16:44:27
>>635
お!カシオFP-1100のことか?w
遅くてまいったぜ!


それにしても,最近は浮動小数点のフォーマットが統一されてきて助かるよな.
IBMの16進浮動小数点のウンコフォーマットとかw

昔は収束判定のパラメータを機械ごとに変えるのがまんどくさかった.
それでFortran90で山のように数値精度に関する関数を導入したんだろうが遅すぎぜw
ほとんど使わないw

それにしてもFortranスレにまでBCDが科学演算にいいんだかいう連中があらわれたんだが,
どこでそんな伝説がながされているんだw
0785デフォルトの名無しさん2006/06/20(火) 19:43:23
IBMの16進指数はやばかったらしいね。パタヘネに載ってた。
IEEEは偉大だー。
0786デフォルトの名無しさん2006/08/13(日) 00:23:43
スレ違い?ここはアンチ浮動小数スレ?

だめもとできいてみるのですが、

浮動小数のフォーマットは理解したのですが、浮動小数同士の足し算や掛け算がどういう仕組みで
行われるのかが知りたいです。
フォーマットや比較についてはググぐと結構みるかるんだけど、演算がみつからなくって。

たとえば2.0fと3.0fの足し算と掛け算あたりを説明してもらえるとうれしいです。
0787デフォルトの名無しさん2006/08/13(日) 01:01:00
小数の足し算が分からないって・・・小学校からやり直せ!
0788デフォルトの名無しさん2006/08/13(日) 09:02:07
>>787
IEEEフォーマットを小学生が理解できるとは思えない。
>>786
説明はWEBで探せばあるかもしれない。
書籍をあたるならば、パターソン&ヘネシーのコンピュータの構成と設計の上巻がオススメ。

一応簡単に説明すると、
足し算はケタをそろえて仮数部を足し算の後正規化。
掛算は仮数部を掛算、指数部を足し算してゲタ分除いて最後に正規化。
とかそんなところ。
0789デフォルトの名無しさん2006/08/13(日) 16:25:55
ケタって指数のことですか??
0790デフォルトの名無しさん2006/08/13(日) 16:50:42
>>788
小学生でも理解できるって。
そりゃ、IEEEフォーマットについて解説してある多くの文章が
小学生向きに書かれてないから小学生が読むには読みにくいで
あろうことはわかるが。
0791デフォルトの名無しさん2006/08/13(日) 17:08:05
>>789
YES
指数をそろえるという意味で使った。
分かりづらくてごめん。

>>790
小学生に実際に理解させようとしてみ。
興味がないことなんてこれっぽっちも聞いちゃくれない。
塾のバイトで心底そう思う。
0792デフォルトの名無しさん2006/08/13(日) 17:12:09
話がずれてる気がするが…

MIPSの教科書のコプロセッサの項なんかも、実装面から非常に詳しく書いてあった覚えがある。
0793デフォルトの名無しさん2006/08/13(日) 17:15:50
>>791
いや、だから自分で興味があったらちゃんと調べるよ。
俺の経験で言うと、小学生のころからプログラミングやってて
ちょっと踏み込んだ内容の書籍はどれも小学生向けに書かれて
なかったから苦労はしたけど、内容そのものはどれも小学生でも
理解できるものばかりだぞ。
0794デフォルトの名無しさん2006/08/13(日) 17:31:08
有効桁数の概念は中学で習ったから、中学生ならいけるのでは。

つまり、>>786は中学生からやり直せ!
0795デフォルトの名無しさん2006/08/14(月) 21:12:59
>>793
その前提で言えば全くその通りだね。
自分もマシン語に興味持って色々と本を読み漁った覚えがある。

>>794
概数なんかは小学校でやるけどなー、とか言ってみる。

というかまぁ、質問主は立ち消えか。
>>786は別の意味で小学生からやり直すべきかもしれんね。
0796デフォルトの名無しさん2006/08/15(火) 00:54:50
>というかまぁ、質問主は立ち消えか。
>>>786は別の意味で小学生からやり直すべきかもしれんね。

そうだね。でも、知識や知恵の類と違ってこーゆーことは幼少時に
学ぶことを失敗したら幼稚園からやり直したところで再学習は困難を
極める・・・というかほぼ無意味。
0797デフォルトの名無しさん2006/08/15(火) 11:53:53
もう救いが無いなw
0798デフォルトの名無しさん2006/09/01(金) 18:28:20
単位系の基礎中の基礎である秒の定義は、セシウムなんちゃらの9,192,631,770倍らしい。
これってあらゆる種類の測定器や工作機械で有効精度10桁オーバーを目指しても無意味ってこと?
途中の演算過程でより多くの精度が必要になるのは解っているつもり。
0799デフォルトの名無しさん2006/09/01(金) 18:43:14
9,192,631,770.00000000000000000000000000...倍
だと思えばいいんじゃ。
0800デフォルトの名無しさん2006/09/02(土) 18:05:39
>>798
定義だから有効桁数という概念はないよ。1分を1秒の60倍と定義するのと同じ。
08017232006/10/03(火) 07:19:54
つ http://tricklib.com/cxx/ex/urr/

非常に遅くなってすまん。
0802デフォルトの名無しさん2006/10/03(火) 07:58:24
カウンタと精度ってどうつながるんでしょうか?
0803デフォルトの名無しさん2006/10/03(火) 09:34:30
繋がらないと思うが
0804デフォルトの名無しさん2006/10/03(火) 19:29:05
>>802
そもそも何のこと?
0805デフォルトの名無しさん2006/10/04(水) 07:29:12
確かに
なぜか時間だけは非常に精度良く計れるんで、
多くの測定器はその時間制度の良さを利用してる。
ADCでも精密なADCは積分型で、これは時間精度を利用してるわけだ
これは水晶の精度が非常に良いからだよね
0806デフォルトの名無しさん2006/10/04(水) 18:03:40
回路で扱える量は、電流と電荷で、
時間に関して積分するからクロックの精度は重要ってことか。
って。

浮動小数点数表現による誤差と
測定誤差は全く別物だと思うが。
0807デフォルトの名無しさん2006/10/04(水) 19:37:07
>>801
おう!とはいえ俺は知識経験ないために、レスができない。
何か感想とかありますか?
0808デフォルトの名無しさん2006/10/04(水) 20:21:13
>>806
だいぶ文脈が飛んでるみたいだが、クロックの精度がどう重要なんだって?
0809デフォルトの名無しさん2006/10/05(木) 13:20:06
カウンタクロックの精度がまちまちだと時間積分の微分量δtが変動して
正確な積分ができないんだろうなーと思ったんだけども・・・。
∫I(t)dt = Q(t)
だったよね。自信ないが。

そもそも805の真意がそういうことなのか良くわからんけど。
どのみち浮動小数点数と関係ない('・ω・`)
0810デフォルトの名無しさん2006/10/07(土) 11:28:41
>>807
なんかいろんなところでURRの実装は面倒とか言われてるし、実際自分も最初は大変だと思った
けど、ちゃんと仕様を正確に理解した上でちゃんと設計すれば簡単に実装できますた。

でも、最初はアホな設計で無駄にエンディアンの縛りがあるコードになったりして2回ほど
作り直しに近い大幅な修正を行ってます。最終的にはかなりコードを簡略化できたし、
エンディアン依存もなくなりました。

Hacker's Delightにでてくるようなビット演算技は使ってないけど割り算を除けばちゃんと
高速に動作するハズです。とは言ってもネイティブの浮動小数点型には遠く及ばないでしょうが。

ネット上に公開したソースに対してライセンスがどーこー言って利用を縛るようなこと
(特にGPL)はナンセンスだと思ってるんで自分でも URR を実装してみようとか考えている
暇人がいたら安心して是非とも参考にしてください。
0811デフォルトの名無しさん2006/10/09(月) 22:45:21
>>810
なるほど。意外とスマートに実装できるみたいですね。
速度を考えると既存プロセッサでの実行は意味がないでしょうが、
知名度が上がれば、今後のハード実装の可能性がありますかね。
まあ、実際には難しいと思うけど、夢見たい感じです。
0812デフォルトの名無しさん2006/10/09(月) 23:11:04
> 速度を考えると既存プロセッサでの実行は意味がないでしょうが、
せめてURRの紹介ページを読んでからものを言え
0813デフォルトの名無しさん2006/10/09(月) 23:56:23
>>812
読んであるけど、既存プロセッサでも意味があるのですか?
0814デフォルトの名無しさん2006/10/10(火) 00:02:39
>>813
スケーラビリティや有効精度特性が IEEE754 とは全然違う。
0815デフォルトの名無しさん2006/10/10(火) 00:09:41
それなら、別に指数部を持たせるなどの、
自前の工夫をした方がいいかと。
逆にソフト実装のURRが役に立つ処理があったら
知りたいですね。
0816デフォルトの名無しさん2006/10/10(火) 00:23:49
URRが真に活きるのは CPU まわりでの実装よりも
各種デバイスとの I/O まわりでの利用だと思う。
固定ビット長での表現力が違うんだから。
0817デフォルトの名無しさん2006/10/10(火) 00:29:58
つまり、計算するときに役立つのではなく、
保存形式として優れているのだな。
0818デフォルトの名無しさん2006/10/10(火) 00:49:41
>>817
保存形式として優れているってことは
計算時においても精度の点では優れていることになる。
速度は落ちるんだろうけど。
0819デフォルトの名無しさん2006/10/10(火) 01:00:29
>>818
それは計算時に優れているとは言わないような気がする。
精度がよければいいんなら、いくらでもデータを増やせばいいし。
0820デフォルトの名無しさん2006/10/10(火) 01:30:45
>>819
同じだけデータを増やしたら保存形式として優れているほうがより精度が増すし、
最終的な出力の保存形式のせいで精度を保てなかったら計算途中の精度をあげても意味がない。
0821デフォルトの名無しさん2006/10/10(火) 01:38:17
初めて話に参加する人間だけど

>最終的な出力の保存形式のせいで精度を保てなかったら計算途中の精度をあげても意味がない。

これは嘘だ。意味はある。
実際、変数に格納するときはdouble(64bit)でも、計算途中はlong double(80bit)で計算されている。
0822デフォルトの名無しさん2006/10/10(火) 02:13:03
>>821
それは double(64bit) のままで計算したら有効精度が double(64bit) の表現力より落ちる為。
最終的な出力の保存形式の*せいで*精度を保てなかったら計算途中の精度をあげても意味がない。
0823デフォルトの名無しさん2006/10/10(火) 02:13:43
>>821
32bit/64bit浮動小数点数でも演算は常に80bitで行われる
っていうのはx87FPUの仕様であってこの話とは直接関係ないだろ。

それに細かいこと言うとlong doubleは80bitとは限らないぞ。
0824デフォルトの名無しさん2006/10/10(火) 06:43:03
IEEE754rの128bit浮動少数は、いつごろハード(FPU)で実装されそうですか?
0825デフォルトの名無しさん2006/10/10(火) 08:37:25
>>822-823
ボケどもが。計算途中で精度を上げることに意味がなかったら、80bitで計算するかアホ。
知能が足りないんじゃない?
08268192006/10/10(火) 16:08:21
俺は、同じデータ量ではなく同じ精度での比較を言ったのだ。
同じ精度ならURRに比べてデータ量が増えるとしても、
演算が高速にできる方が、普通はいいでしょ。
0827デフォルトの名無しさん2006/10/10(火) 18:40:33
>>822
> 最終的な出力の保存形式の*せいで*精度を保てなかったら計算途中の精度をあげても意味がない。

計算途中での誤差の蓄積を減らすという意味があるよ。
0828デフォルトの名無しさん2006/10/10(火) 18:50:34
結局お前ら何が言いたいんだ?
文章の途中で主張が変わったり、論理が飛躍するからワケがわからん。
恐らく熱くなってるのは二人だけだろうから、そこを直せば決着がつくだろう。
もうちょっと主張をまとめてみれ。
0829デフォルトの名無しさん2006/10/12(木) 17:24:49
IBM、次期プロセッサ「POWER6」で「5GHzに近い高速化」を実現--10進数にも対応
http://japan.cnet.com/news/ent/story/0,2000056022,20268747,00.htm
>ハードウェア内で10進数の演算を実行すれば、
>処理速度を2〜7倍にまで上げられるという。
0830デフォルトの名無しさん2006/10/15(日) 21:04:07
素人のコード見たらlongで金の勘定してたり世にも恐ろしい
0831デフォルトの名無しさん2006/10/15(日) 21:08:54
お小遣い帳ならその程度で十分じゃね?
0832デフォルトの名無しさん2006/10/15(日) 21:49:24
整数型で金勘定は別におかしくないと思うが
0833デフォルトの名無しさん2006/10/15(日) 22:41:15
利率計算は十進でやらんとおこられるんだってさ。
0834デフォルトの名無しさん2006/10/16(月) 10:49:18
そろそろ契約書や法律、約款も2進数で書いてくれたらいいのにな。
0835デフォルトの名無しさん2006/10/16(月) 16:57:16
定数じゃなくて方程式で書けばいいんじゃね。
0836デフォルトの名無しさん2006/10/16(月) 17:44:31
方程式の貨幣が流通するならそれもアリだね。
0837デフォルトの名無しさん2006/10/16(月) 19:07:49
「おじさん、このりんごいくら?」
「x^3-3x^2+5円だよ。」
「はい、2x^3。」
「おつりは……はいx^3+3x^2-5円だよ。まいどー。」
「ありがとー。」

舌噛むと思う。
0838デフォルトの名無しさん2006/10/18(水) 21:37:32
GF(2)で考えろや
0839デフォルトの名無しさん2006/10/18(水) 22:07:55
おいおい。
0840デフォルトの名無しさん2007/01/07(日) 13:29:57
保守
0841デフォルトの名無しさん2007/01/14(日) 15:09:09
□!!!これを見た貴方は3日以内に死にます!!!■
■死にたくなければ、このレスをコピーして他のスレに □
□10回貼り付けて下さい。1時間以内にです!もし無 ■
■した場合は、今日寝ている間に富子さんがやってきて□
□貴方の首を絞めに来ます。富子さんは太平洋戦争の■
■時に16歳という若さで亡くなった女の子で、未だに成 □
□仏していないそうです。信じる信じないは貴方次第。 ■
■今年になってからこのレスを無視した人で、“呪われ □
□て死亡した人”が続出しています。これは富子さんの ■
■呪い。呪われて死んでもいいのならこれを無視するこ□
□とでしょうね。                        ■
■――貴方がこうしているうちに富子さんが後ろから見□
□ていますよ…。                       ■
■□■□■□■□■□■□■□■□■□■□■□■□
0842デフォルトの名無しさん2007/01/16(火) 01:37:18
+0.0 と -0.0 をビットパターンを見ずにC言語で識別する方法はありませんでしょうか?

一応 x を +0.0 もしくは -0.0 としたとき atan( x, -1.0 ) の符号で識別できますけれど,
もっと良い方法はありますかね?
0843デフォルトの名無しさん2007/01/16(火) 01:54:14
1÷(+0)は正の無限大で
1÷(-0)は負の無限大だな。
状況によってはトラップになるかもしれない。
08448422007/01/16(火) 02:31:53
あ,すいません.重要な要求書き忘れてました.
signal や浮動少数例外を発生させない well-defined な演算でやりたいんです.
0845デフォルトの名無しさん2007/01/16(火) 11:06:11
if(x < 0) とかではダメなの?
08468422007/01/16(火) 14:28:10
>>845
いや,それは +0.0 も -0.0 も偽を返すんじゃなかったでしたっけ?
0847デフォルトの名無しさん2007/01/16(火) 15:22:06
どっちにしろローレベルではビットパターンを比較するしかないでしょ。
定数+0.0とXORをとって0かそうでないかで分岐する。
インラインアセンブラで書くと、
movやらxorやらjzなどはどれも高速に実行できるので効率的でしょう。
atanだと相当クロック数かかりそう。
0848デフォルトの名無しさん2007/01/16(火) 18:54:15
>>842
<float.h>かどこかにそれ用のマクロかなにかあるんじゃないの?
その中でビットパターンを見てるんだとしても、
自分で書いたコードじゃないから許せるだろ。
0849デフォルトの名無しさん2007/01/19(金) 19:09:49
>>817-823
おまいら、話の焦点どこいった。

途中の計算精度を上げる意味が無いって言うのは、
例えば結果として32bitの計算精度がほしい場合に、内部で64bitあれば十分だとする。
すると、わざわざ内部で128bitとかで演算するのは意味が無いっていう話では?

必要な計算精度と、内部の計算精度を混同しているだろ、>>819>>821
0850デフォルトの名無しさん2007/01/28(日) 04:04:46
>>842
>+0.0 と -0.0 をビットパターンを見ずにC言語で識別する方法はありませんでしょうか?

if (hoge == +0.0)

or

if (hoge == -0.0)

じゃダメなんだっけ?
0851デフォルトの名無しさん2007/01/28(日) 15:46:44
そういう、誰でも思いつく方法は、
ダメなんだろうなと、想像がつくと思うが・・・

そういう、誰でも思いつく上に試すのが簡単な例なら、
せめて自分で試してみて
うまくいってから、書きこんでくれ
0852デフォルトの名無しさん2007/01/30(火) 23:26:41
(´・ω・`) -0.0と+0.0が等しいのはなんでだろん。
0853デフォルトの名無しさん2007/01/30(火) 23:42:56
IEEE754の定義を見るか、x86使ってるのならCPUマニュアルを
見ればいいな。
0854デフォルトの名無しさん2007/02/19(月) 20:49:57
0855デフォルトの名無しさん2007/02/25(日) 02:42:01
>852
だってどっちも0じゃん
てかatan( x, -1.0 )の意味わかんね、なんで引数2つ
-Infにして判定するのが-0.0存在理由からして正しいきがす
これだった十分にwell-definedとおもお

0856デフォルトの名無しさん2007/03/14(水) 01:54:14
>>855
日本語でおk
0857デフォルトの名無しさん2007/03/17(土) 10:19:33
>>855
英語でもおk
0858デフォルトの名無しさん2007/07/02(月) 10:15:27
あのー、IA-32限定でつかぬことをお伺いしますが、
割り込みハンドラやタスクスイッチって、
FPUやらMMXやらSSEやらのレジスタ全部退避しないといけないんですか?
みんなやってるんですか?
0859デフォルトの名無しさん2007/07/05(木) 10:05:47
当然
0860デフォルトの名無しさん2007/07/06(金) 18:17:16
>>858
やらないで済むような特殊なシステムならやらないのかもね。
08618582007/07/06(金) 21:16:04
古いPentiumの人はどうすればいいのでしょう。
タスクスイッチ入る度にSSEの有無を判定しているのかなぁ。
それとも起動時に一度だけ判定して全てのタスクスイッチのコードを差し替えるとか…

Linuxとか、浮動小数演算アリのスレッドとナシのスレッドとかちゃんと区別してるのかなぁ。
0862デフォルトの名無しさん2007/07/06(金) 22:24:40
RTLinuxだとタスクスイッチのコストを下げるために
デフォルトでFPU使用不可にしてFPUレジスタの退避をしないはず。
パッチ見て確かみてみろ!
■ このスレッドは過去ログ倉庫に格納されています