[過去ログ] Pythonのお勉強 Part68 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
153: (ワンミングク MM42-nX9g) 2022/09/28(水)13:38 ID:E42G0/DqM(1) AAS
元々の桁数でroundしたいって感じなのかな
154
(2): (ワッチョイ 2701-tX/F) 2022/09/28(水)18:25 ID:OOL0jr8Q0(2/2) AAS
>>152
format使うの提案したけど使わないほうがよさそう、誤差がでる

f(n): 負数で落ちる
s=str(n).lstrip("-")

c=Decimal(n*r) のところで
n*r で誤差がでる
c=Decimal(str(n)) * Decimal(str(r))

負数対応四捨五入 -0.015 を四捨五入して -0.02
rs=((c > 0) - (c < 0)) * abs(c).quantize(Decimal("0."+("0"*d)), rounding=ROUND_HALF_UP)

-0.015 を四捨五入して -0.01のようにしたい場合
rs=c.quantize(Decimal("0."+("0"*d)), rounding=ROUND_HALF_UP)

四捨五入したいのかよくわからんかった、roundingは好みのオプションでどうぞ
155: 2022/09/28(水)19:37 ID:9I9ISsCh(6/6) AAS
>>154
ありがとうございます
やはり至るところで誤差が発生するのですね
四捨五入は今回の用途ではどちらでも良い感じです
せっかくなのでまとめてみました
外部リンク:ideone.com
ありがとうございました
156: (ワッチョイ 96bb-nd6Q) 2022/09/28(水)19:42 ID:o0cHd3Tq0(1) AAS
先にIEEE754読んでみては?
誤差に関しての勘所がわかるようになる
157: (ワッチョイ 2f97-5djn) 2022/09/28(水)20:32 ID:x5UMfEp40(1) AAS
Pythonに限らず浮動小数点数を使う場合は常に誤差の問題がつきまとう。
0.1というのがすでに二進数ではきっちり表現できない数字なので、有効数字を何桁にするのかというのは実装の段階で決めなくちゃならない。

外部リンク[html]:docs.python.org

正確に表現できるのは、0.5,0.25,0.125...と1を2で割っていった数とその整数倍のみ

0.1は1/(2×5)となり1/5が2進数では循環小数となり浮動小数点数では正確に表せない。

ということを念頭に置いてまず何がやりたいか考えた方がいいよ。

decimalモジュールは便利そうだね。
158: (ワッチョイ 23da-QqKk) 2022/09/28(水)23:21 ID:FDPwu/KN0(1) AAS
log2で有効桁数計算出来るでしょ
159: (ワッチョイ 2701-tX/F) 2022/09/29(木)00:26 ID:3C3gpnCY0(1) AAS
>>154
どちらの書き方でも
-0.015 を四捨五入したら-0.02だった、すまん
-0.01にしたい場合は自力でなんとかして
160
(6): (ワッチョイ 9202-XjGR) 2022/09/30(金)00:55 ID:qun5+YRs0(1) AAS
昔から不思議なんだけど
何で分数で処理しないのかな?
最後に割り算を一回だけすれば
誤差がでないじゃないの
161
(1): (ガックシ 06de-TTgm) 2022/09/30(金)01:46 ID:0IYvIpx66(1) AAS
掛け算でも足し算でも誤差が出るから
162: (ワッチョイ b302-nX9g) 2022/09/30(金)01:53 ID:sForoGQI0(1) AAS
Pythonは整数側の桁数制限が無いのを利用して高精度にできそう
163: (アウアウウー Sa43-hb2l) 2022/09/30(金)02:07 ID:f+ZVHjVVa(1) AAS
>>160
似たような大きさの数字ならその発想もいいけどね
現実はコスパの悪い任意精度の演算が必要になることが多いのでは
164: (ワッチョイ 23da-QqKk) 2022/09/30(金)03:11 ID:FkDRVgM50(1) AAS
>>160
つ fractions
165: (ワッチョイ 96bb-nd6Q) 2022/09/30(金)04:56 ID:HxNT59pn0(1) AAS
だから誤差の話するならIEEE754読めよ
166: (ワッチョイ f390-UZRN) 2022/09/30(金)04:57 ID:CfDFJOy00(1) AAS
>>160
昔GCD付きの分数クラス作ったけど
結局はdoubleになったことがある
167: (ワッチョイ 1201-ut7I) 2022/09/30(金)05:21 ID:oHn8O8ll0(1/4) AAS
>>160
四則演算だけならいいけど√とかsin( )とかはどうする?

>>161
掛け算、足し算で誤差がでるケースとは?
168
(1): (ワッチョイ 1e66-yYUR) 2022/09/30(金)08:01 ID:Gm4+1fgX0(1/3) AAS
sinとかも内部は四則演算
169
(1): (ワッチョイ 1201-ut7I) 2022/09/30(金)09:17 ID:oHn8O8ll0(2/4) AAS
>>168
近似演算の話されても困るんだがw
170
(1): (アウアウウー Sa43-hb2l) 2022/09/30(金)09:23 ID:k91OtGRla(1/2) AAS
三角関数の近似じゃない演算て
171: (ワッチョイ 2701-okKg) 2022/09/30(金)10:05 ID:EsKmogiV0(1) AAS
python chapelについて質問です。
情報があまりないので、チャペルについてお勧めのサイトがあれば教えてほしいです。
172: (ワッチョイ d633-zg6P) 2022/09/30(金)10:38 ID:t/wNXSJY0(1) AAS
クヌースのTAOCP読むといいよ
コンピュータでの数値計算の全てが書かれてる
173
(2): (ワッチョイ 1201-ut7I) 2022/09/30(金)13:20 ID:oHn8O8ll0(3/4) AAS
>>170
sinsin, cos のまま計算するって話だろ
数学不得意か?
174
(1): (アウアウウー Sa43-hb2l) 2022/09/30(金)13:47 ID:k91OtGRla(2/2) AAS
>>173
そんなもん代数的な操作だろ
175: (ブーイモ MM32-tu6s) 2022/09/30(金)13:54 ID:oSg68bQdM(1) AAS
>>160
遅いからだよ
176: (ワッチョイ 1201-ut7I) 2022/09/30(金)14:09 ID:oHn8O8ll0(4/4) AAS
>>174
話は>>160から始まってて途中は代数的な操作で最後に一回だけ演算することで誤差を抑えられるって話な
177
(1): (ワッチョイ 1610-DrlT) 2022/09/30(金)16:11 ID:7g2iZKZC0(1/2) AAS
三角関数は二項演算じゃないから後も先もないだろ
178: (ワッチョイ 4b08-KM/t) 2022/09/30(金)16:39 ID:du1MSukG0(1) AAS
ここまで有効数字の話なし
179: (ワッチョイ 1e66-yYUR) 2022/09/30(金)16:40 ID:Gm4+1fgX0(2/3) AAS
有理数演算に有効数字は関係ない
180: (ワッチョイ 1610-DrlT) 2022/09/30(金)17:02 ID:7g2iZKZC0(2/2) AAS
実は誰も数値計算誤差について知らないのである
181: (ワッチョイ 1e66-yYUR) 2022/09/30(金)17:36 ID:Gm4+1fgX0(3/3) AAS
組み込み系で、積算の量を保持していて
1秒毎に測定して何年というスパンで計算を続けると、
もう32bitでは精度が足りなくなる
182: (ワッチョイ 2f97-5djn) 2022/09/30(金)18:26 ID:J+iH2myB0(1/2) AAS
最後に浮動小数点数にして誤差を減らす方法は、代数的な計算ができる必要がある。
Mathematicaとか、SymPyだな。
ただ代数的な計算は上手いこと式を整理してやらないと簡単にならないことも多い。積分は公式を知らないと出来ない、というのと同じ。
有理数の四則演算だったら単なる有理数演算を逐次的に実行していけば問題ないだろうが。
1-
あと 820 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.015s