[過去ログ]
Pythonのお勉強 Part68 (1002レス)
Pythonのお勉強 Part68 http://mevius.5ch.net/test/read.cgi/tech/1663235546/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
147: デフォルトの名無しさん (ワッチョイ 2701-tX/F) [sage] 2022/09/28(水) 02:27:12.38 ID:OOL0jr8Q0 >>144 それだと n=1.0 -> 1 n=0.00001 -> IndexError になる len(format(n,".17f").split(".")[1].rstrip("0")) 後ろのif isinstance(n, float) else 0も不要 n=1.0 -> 0 n=0.00001 -> 5 http://mevius.5ch.net/test/read.cgi/tech/1663235546/147
148: デフォルトの名無しさん [sage] 2022/09/28(水) 09:19:00.77 ID:9I9ISsCh >>145-147 たしかに 0.30000000000000004に対して17得られたのは正解だと思いますが 0.00001で1e-05になっててエラーでました Decimalかformat使ってみようと思います ありがとうございました http://mevius.5ch.net/test/read.cgi/tech/1663235546/148
149: デフォルトの名無しさん [sage] 2022/09/28(水) 10:07:58.97 ID:9I9ISsCh やりたかったことは 受けとった1234.56や0.12345などの固定小数点数に 0.1とかを掛けたり足したりして計算、変形したのを 受け取った固定小数点数の整数部と小数部の数を維持したまま 固定小数点か文字列で処理したかったのですが 改めてやってみるとなんか勝手に桁数が変わってしまいますね・・ 1234.56で受け取った場合、1.05を掛けたとき→1296.288ではなく1296.29 0.12345で受け取った場合、1.05を掛けたとき→0.1296225ではなく0.12962 1234で受け取った場合、1.05
を掛けたとき→1295.7でもいいし1296でもいいし1296.0でもいい みたいにしたかったのですが難しい・・ http://mevius.5ch.net/test/read.cgi/tech/1663235546/149
150: デフォルトの名無しさん [sage] 2022/09/28(水) 10:17:26.42 ID:9I9ISsCh from decimal import Decimal str(Decimal(0.123456)) str(Decimal(0.123456)*Decimal(1.05)) #'0.1296288000000000015945911258' あれ、そもそも0.123456の小数部の桁数はどうやって知るんだっけ?? てところで詰まってます・・ http://mevius.5ch.net/test/read.cgi/tech/1663235546/150
151: デフォルトの名無しさん [sage] 2022/09/28(水) 11:25:04.93 ID:9I9ISsCh 冗長な気がしますがこんな感じにしてみました 何かバグが発生しそうな気がします from decimal import Decimal ary=[1234.5,165,0.34,0.0001,0.000001,3.00001,0.1*3,123456] def f(n): s=format(n) return int(s.split("-")[1]) if "-" in s else len(s.split(".")[1].rstrip("0")) if "." in s else 0 r=1.05 for n in ary: d=f(n) c=Decimal(n)*Decimal(r) rs=c.quantize(Decimal("0."+(&qu
ot;0"*d))) print(n,c,d) print("-->",rs,"\n") http://mevius.5ch.net/test/read.cgi/tech/1663235546/151
152: デフォルトの名無しさん [sage] 2022/09/28(水) 11:30:47.23 ID:9I9ISsCh 連投すみません 結果です https://ideone.com/exojEw http://mevius.5ch.net/test/read.cgi/tech/1663235546/152
153: デフォルトの名無しさん (ワンミングク MM42-nX9g) [sage] 2022/09/28(水) 13:38:45.48 ID:E42G0/DqM 元々の桁数でroundしたいって感じなのかな http://mevius.5ch.net/test/read.cgi/tech/1663235546/153
154: デフォルトの名無しさん (ワッチョイ 2701-tX/F) [sage] 2022/09/28(水) 18:25:19.27 ID:OOL0jr8Q0 >>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.qua
ntize(Decimal("0."+("0"*d)), rounding=ROUND_HALF_UP) 四捨五入したいのかよくわからんかった、roundingは好みのオプションでどうぞ http://mevius.5ch.net/test/read.cgi/tech/1663235546/154
155: デフォルトの名無しさん [sage] 2022/09/28(水) 19:37:21.94 ID:9I9ISsCh >>154 ありがとうございます やはり至るところで誤差が発生するのですね 四捨五入は今回の用途ではどちらでも良い感じです せっかくなのでまとめてみました https://ideone.com/JmTu06 ありがとうございました http://mevius.5ch.net/test/read.cgi/tech/1663235546/155
156: デフォルトの名無しさん (ワッチョイ 96bb-nd6Q) [sage] 2022/09/28(水) 19:42:02.44 ID:o0cHd3Tq0 先にIEEE754読んでみては? 誤差に関しての勘所がわかるようになる http://mevius.5ch.net/test/read.cgi/tech/1663235546/156
157: デフォルトの名無しさん (ワッチョイ 2f97-5djn) [] 2022/09/28(水) 20:32:50.93 ID:x5UMfEp40 Pythonに限らず浮動小数点数を使う場合は常に誤差の問題がつきまとう。 0.1というのがすでに二進数ではきっちり表現できない数字なので、有効数字を何桁にするのかというのは実装の段階で決めなくちゃならない。 https://docs.python.org/ja/3/tutorial/floatingpoint.html 正確に表現できるのは、0.5,0.25,0.125...と1を2で割っていった数とその整数倍のみ 0.1は1/(2×5)となり1/5が2進数では循環小数となり浮動小数点数では正確に表せない。 という
ことを念頭に置いてまず何がやりたいか考えた方がいいよ。 decimalモジュールは便利そうだね。 http://mevius.5ch.net/test/read.cgi/tech/1663235546/157
158: デフォルトの名無しさん (ワッチョイ 23da-QqKk) [sage] 2022/09/28(水) 23:21:28.71 ID:FDPwu/KN0 log2で有効桁数計算出来るでしょ http://mevius.5ch.net/test/read.cgi/tech/1663235546/158
159: デフォルトの名無しさん (ワッチョイ 2701-tX/F) [sage] 2022/09/29(木) 00:26:06.29 ID:3C3gpnCY0 >>154 どちらの書き方でも -0.015 を四捨五入したら-0.02だった、すまん -0.01にしたい場合は自力でなんとかして http://mevius.5ch.net/test/read.cgi/tech/1663235546/159
160: デフォルトの名無しさん (ワッチョイ 9202-XjGR) [sage] 2022/09/30(金) 00:55:04.52 ID:qun5+YRs0 昔から不思議なんだけど 何で分数で処理しないのかな? 最後に割り算を一回だけすれば 誤差がでないじゃないの http://mevius.5ch.net/test/read.cgi/tech/1663235546/160
161: デフォルトの名無しさん (ガックシ 06de-TTgm) [sage] 2022/09/30(金) 01:46:32.47 ID:0IYvIpx66 掛け算でも足し算でも誤差が出るから http://mevius.5ch.net/test/read.cgi/tech/1663235546/161
162: デフォルトの名無しさん (ワッチョイ b302-nX9g) [sage] 2022/09/30(金) 01:53:32.93 ID:sForoGQI0 Pythonは整数側の桁数制限が無いのを利用して高精度にできそう http://mevius.5ch.net/test/read.cgi/tech/1663235546/162
163: デフォルトの名無しさん (アウアウウー Sa43-hb2l) [sage] 2022/09/30(金) 02:07:16.16 ID:f+ZVHjVVa >>160 似たような大きさの数字ならその発想もいいけどね 現実はコスパの悪い任意精度の演算が必要になることが多いのでは http://mevius.5ch.net/test/read.cgi/tech/1663235546/163
164: デフォルトの名無しさん (ワッチョイ 23da-QqKk) [sage] 2022/09/30(金) 03:11:26.40 ID:FkDRVgM50 >>160 つ fractions http://mevius.5ch.net/test/read.cgi/tech/1663235546/164
165: デフォルトの名無しさん (ワッチョイ 96bb-nd6Q) [sage] 2022/09/30(金) 04:56:46.10 ID:HxNT59pn0 だから誤差の話するならIEEE754読めよ http://mevius.5ch.net/test/read.cgi/tech/1663235546/165
166: デフォルトの名無しさん (ワッチョイ f390-UZRN) [sage] 2022/09/30(金) 04:57:30.60 ID:CfDFJOy00 >>160 昔GCD付きの分数クラス作ったけど 結局はdoubleになったことがある http://mevius.5ch.net/test/read.cgi/tech/1663235546/166
167: デフォルトの名無しさん (ワッチョイ 1201-ut7I) [sage] 2022/09/30(金) 05:21:28.14 ID:oHn8O8ll0 >>160 四則演算だけならいいけど√とかsin( )とかはどうする? >>161 掛け算、足し算で誤差がでるケースとは? http://mevius.5ch.net/test/read.cgi/tech/1663235546/167
168: デフォルトの名無しさん (ワッチョイ 1e66-yYUR) [sage] 2022/09/30(金) 08:01:25.94 ID:Gm4+1fgX0 sinとかも内部は四則演算 http://mevius.5ch.net/test/read.cgi/tech/1663235546/168
169: デフォルトの名無しさん (ワッチョイ 1201-ut7I) [sage] 2022/09/30(金) 09:17:00.10 ID:oHn8O8ll0 >>168 近似演算の話されても困るんだがw http://mevius.5ch.net/test/read.cgi/tech/1663235546/169
170: デフォルトの名無しさん (アウアウウー Sa43-hb2l) [sage] 2022/09/30(金) 09:23:23.51 ID:k91OtGRla 三角関数の近似じゃない演算て http://mevius.5ch.net/test/read.cgi/tech/1663235546/170
171: デフォルトの名無しさん (ワッチョイ 2701-okKg) [] 2022/09/30(金) 10:05:45.64 ID:EsKmogiV0 python chapelについて質問です。 情報があまりないので、チャペルについてお勧めのサイトがあれば教えてほしいです。 http://mevius.5ch.net/test/read.cgi/tech/1663235546/171
172: デフォルトの名無しさん (ワッチョイ d633-zg6P) [sage] 2022/09/30(金) 10:38:01.55 ID:t/wNXSJY0 クヌースのTAOCP読むといいよ コンピュータでの数値計算の全てが書かれてる http://mevius.5ch.net/test/read.cgi/tech/1663235546/172
173: デフォルトの名無しさん (ワッチョイ 1201-ut7I) [sage] 2022/09/30(金) 13:20:23.85 ID:oHn8O8ll0 >>170 sinsin, cos のまま計算するって話だろ 数学不得意か? http://mevius.5ch.net/test/read.cgi/tech/1663235546/173
174: デフォルトの名無しさん (アウアウウー Sa43-hb2l) [sage] 2022/09/30(金) 13:47:23.87 ID:k91OtGRla >>173 そんなもん代数的な操作だろ http://mevius.5ch.net/test/read.cgi/tech/1663235546/174
175: デフォルトの名無しさん (ブーイモ MM32-tu6s) [sage] 2022/09/30(金) 13:54:50.47 ID:oSg68bQdM >>160 遅いからだよ http://mevius.5ch.net/test/read.cgi/tech/1663235546/175
176: デフォルトの名無しさん (ワッチョイ 1201-ut7I) [sage] 2022/09/30(金) 14:09:07.38 ID:oHn8O8ll0 >>174 話は>>160から始まってて途中は代数的な操作で最後に一回だけ演算することで誤差を抑えられるって話な http://mevius.5ch.net/test/read.cgi/tech/1663235546/176
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 826 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.021s