[過去ログ] Perlについての質問箱 64箱目 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
115: 2019/11/06(水)03:51 ID:ZoqI13Ph(1) AAS
あるよ
use bigrat;
my %ISO_number = (
100 => 0,
125 => 1/3,
160 => 2/3,
200 => 1,
250 => 4/3,
320 => 5/3,
400 => 2,
500 => 7/3,
640 => 8/3,
800 => 3,
1000 => 10/3,
1250 => 11/3,
1600 => 4,
2000 => 13/3,
2500 => 14/3,
3200 => 5,
4000 => 16/3,
5000 => 17/3,
6400 => 6,
8000 => 19/3,
10000 => 20/3,
12800 => 7,
);

# dirty hack: 0/1 force rational type
# warning: if it locate last, sum goes WRONG!
printf "%s\n", 0/1 + $shutter_speed{$ss} + $F_number{$F} - $ISO_number{$ISO};
116: 2019/11/06(水)09:06 ID:dfSHCt1W(1) AAS
浮動小数点の問題は知っていたが、こうなる事は初めて知った。危ないもんだな。

$c = $a / $b; # $c = 500
$e = int($c); # $e = 499
117
(1): 2019/11/06(水)09:28 ID:i85ttsqs(1/4) AAS
>>111
それはバグではないし、昔々からある超有名な仕様。知らないのはお前だけ。
118: 2019/11/06(水)10:08 ID:yvB3xxPc(2/5) AAS
>>112
>>113
>>114
>>117
仕様で他の言語でもあるのですね。Perlで明示的な型指定とかはほぼ考えたことが無かった(1.08の時は意図した結果が得られていた)ので、勉強してみます。
ありがとうございます。
119: 2019/11/06(水)10:29 ID:i85ttsqs(2/4) AAS
言語というよりはライブラリやCPUの問題だ。
しかしだいたいのメジャーな言語が採用しちゃってるので言語に関係なく出ると思って良い。
120
(1): 2019/11/06(水)17:59 ID:j94j+HrP(1) AAS
言語仕様っていうと違和感あるね
意図してこうしてますって感じで
IEEE 754の仕様といえばそうなのかもしれんがあれは規格であって
仕様とはまたニュアンスが違う なんつーか実数扱うときはそんなもんという感覚
121
(1): 2019/11/06(水)18:58 ID:yvB3xxPc(3/5) AAS
>>111
一応、取った対応策です(消費税計算なので精度は不要)
除算解は有効桁数以下が切り捨てになり表示などで見える値以下になると想定しました

$a = 550;
$b = 1.1;

$c = ;
$tax= int($a - $a / $b); # $tax = 50
$net = $a - $tax; # $net = 500

端数を残したまま税込から除算解を引いてintして税とし、税込から税を引いて本体としました
とりあえず期待した結果は得られています

ありがとうございました。
122: 2019/11/06(水)18:59 ID:yvB3xxPc(4/5) AAS
$c = ;

この行余計でした
123
(1): 2019/11/06(水)19:44 ID:mEOqpT9o(1/2) AAS
>>120
C/C++なら規格が精密なのでそういう違和感もわかるが、Perlの場合は逆におかしいやろ。w
124
(2): 2019/11/06(水)19:52 ID:mEOqpT9o(2/2) AAS
>>121
税率によってはきっとアカン場合がありそう。。。
単純な切り捨てはヤバいような。
まあ、そこまでの精度はイランのやろけども。

ちなみに、今回のケースなら、$x/1.1とするのではなく、$x*100/110としたほうが安定しそう?
125
(1): 2019/11/06(水)20:39 ID:yvB3xxPc(5/5) AAS
>>124
うちは税込ものを分離する時は消費税側で小数点以下切り捨てなのでOKなのです
四捨五入とか会計方針によっては稀に問題が出るかもしれませんね
126
(1): 2019/11/06(水)21:15 ID:i85ttsqs(3/4) AAS
1.1を掛けるなら11を掛けてから10で割った方が良いかもな。そうすると正数計算でやれる。
切り上げや四捨五入をしたい場合は10で割る前に一桁目を見て10を足したり足さなかったりすれば良い。
127: 2019/11/06(水)21:18 ID:i85ttsqs(4/4) AAS
ああ。逆か。税込みから本体と税を求めるのか。でも考え方は同じだな。
128
(2): 2019/11/07(木)00:06 ID:gr4VkOsJ(1/2) AAS
>>125
違うぞ。今回の問題点をちゃんとわかってるか?
1.1と書いたリテラルが、実際の値は1.10...となっていて、1.1よりも大きかったことだぞ。

誤差の具合によっては、正確には切り捨てが不要な値でも、除数が大きいせいで計算結果が実際よりも小さい値になってしまって、してはいけない切り捨てが発生してしまう可能性はないんかね。
129: 2019/11/07(木)00:07 ID:gr4VkOsJ(2/2) AAS
>>126
>>124
130: 2019/11/07(木)01:08 ID:q6f07NqD(1/2) AAS
>>128
消費税は小数点を使わず整数計算で
10 /110
8 / 108
で計算するようにします

アドバイスありがとうございます
131: 2019/11/07(木)01:12 ID:q6f07NqD(2/2) AAS
>>128
うちの会社ではあんなに国家予算並みにたくさん「0」が出てくる消費税計算は無いのでとりあえずの回避でも大丈夫です
とはいえ先ほどのように整数計算に修正しようと思います
132: 2019/11/09(土)10:00 ID:q+fGPpet(1) AAS
どちらにせよ、小数点以下をどう扱うかは仕様で決めないとダメだな。
133: 2019/11/14(木)22:54 ID:cMIrVE8k(1) AAS
ファイルハンドル($fh)からファイル名を取得する方法ってありますか?
・stat $fhでinode取得してシェルのfindで見つけるってのはコストかかるのでやりたくない。
*{$fh}{IO}辿ってIO::Fileから得られないかなって調べたんですけど分かりませんでした。
基本的にそういう思想がないってことかも知れません。
134: 2019/11/15(金)00:28 ID:WAwhq9DE(1) AAS
ムリやろ。
ファイル名のないファイルハンドルも少なくないしな。
135: 2019/11/15(金)12:49 ID:qkK0C17l(1) AAS
ファイルハンドルからファイル名を求めるシステムコールとかもないしな。
ハードリンクされてて1つのi-nodeで複数のファイル名を持ってたらどうすんのっていう問題もある。

自分の作ったプログラムの中だけでいいならそのプログラム内だけの独自のopen,close作ってそこでファイル名を保持しとけば良いんじゃないかな。
136: 2019/11/15(金)22:37 ID:9LSwivmi(1) AAS
お二方ありがとう
そもそもそういう使い方をするものではないって理解しました
137
(1): 2019/11/17(日)00:22 ID:+/PgA3gU(1) AAS
そもそもファイルをopenした時点で、ファイル名は自明だろ、、、
<>の場合は、今開いているファイル名は、$ARGVでアクセス出来るし、、、
while(<>){ print $ARGV if $. == 1 ; $. = 0 if eof }

他は、自分でコード書くんだからファイルリストの管理すりゃいいだけの
話だし。
138: 2019/11/17(日)00:47 ID:7P3Fm4Oa(1) AAS
>>137
ファイルハンドルだけもらうクラスかもよ
139: 2019/11/17(日)01:44 ID:cO7DNsZu(1) AAS
いや、気持ちはわかるやろ。
ファイルハンドルは、しょせんハンドルでしかないと納得するのは、事情がある程度わかってからなんだから。
140
(1): 2019/11/17(日)07:47 ID:bNRHw2eJ(1) AAS
ファイルハンドルをインクリメントすると次のファイルを指すハンドルになることはあまり知られていない。
141: 2019/11/17(日)12:07 ID:Ew4nGi4g(1) AAS
>>140
それは、Perlのファイルハンドルの話か?
Cのファイルポインタではなく?
142
(1): 2019/11/18(月)08:50 ID:4tmHvePg(1) AAS
ActivePerl 5.22 から 5.28 にアップデートしたのだが、
次のものがなくなってしまって、とても不便になった気がする。
・PerlEz.dll
・ppm(perlパッケージマネージャー)
・htmlドキュメント

他の2点はいいとしても、PerlEz.dllが無いと生きていけないので、
5.22 に戻した。もう一生5.22 を使い続けることになるのかな。
なぜ、こんな事をするのだろうか?
143: 2019/11/18(月)20:45 ID:2uYwgX87(1) AAS
Strawberry Perl 使えよ
144: 2019/11/22(金)22:32 ID:G0qxcoi/(1) AAS
そういやみんな最新の安定版使ってんの?
うちは5.20で止めてる。特に意味はないんだけどこれが安定してるってどこかで見たから。
1-
あと 858 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.016s