C言語なら俺に聞け 154

■ このスレッドは過去ログ倉庫に格納されています
2020/01/14(火) 19:32:30.16ID:SgRnb4BR0
!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/

※前スレ
C言語なら俺に聞け 153
https://mevius.5ch.net/test/read.cgi/tech/1566050562/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2020/01/28(火) 19:15:06.58ID:oIjih5hj0
起こせるけど再帰の方がシンプルに書ける
2020/01/28(火) 19:58:49.90ID:KHL1SP2c0
バカには(再帰は)無理
2020/01/28(火) 21:13:43.62ID:kvBVtoLm0
>>138
本当ですか?
二方向以上への再帰をループに起こせる自信は私にはありません
2020/01/28(火) 21:28:18.02ID:wcDzWZFN0
枝分かれするとき、「今は進まない」方向を待ち行列に並ばせておいて
あとで対応しにくればええやん
2020/01/29(水) 04:36:34.49ID:8i6C3PjP0
複数関数をまたがる再帰
関数コールがたくさんの箇所で行われる

こんなヤツだとループにするのは非常にメンディー

可能ではあるけど
2020/01/29(水) 07:12:24.51ID:6aVmGUgqM
クイックソートの非再帰実装とかあちこちに転がってるから勉強しとけ。
待ち行列じゃなくスタックな。
145デフォルトの名無しさん (ワッチョイ 9e8c-Witc)
垢版 |
2020/01/29(水) 07:41:04.40ID:X/jeBiHu0
大きいプログラムだと差は小さい。
2020/01/29(水) 08:52:34.15ID:WHzHFeoy0
>>144
キューでも再帰実装できるし別に良くね?
147デフォルトの名無しさん (アウアウウー Sa21-lBRq)
垢版 |
2020/01/29(水) 09:55:20.60ID:Ji+gdkxYa
もっと口を尖らせて
2020/01/29(水) 10:07:23.93ID:6aVmGUgqM
>>146
できる例もあるが一般の再帰では無理
2020/01/29(水) 10:15:28.71ID:WHzHFeoy0
>>148
太い枝から積んで順にやってけばええんやで
2020/01/29(水) 11:54:36.69ID:/CdgIXHbH
>>149
よくわからんからコード出して
2020/01/29(水) 11:56:45.66ID:HJZ6WUGV0
金取っていいパターンだな
2020/01/29(水) 13:00:56.99ID:jPsoIsZ7d
一般的には
パラメーターとローカル変数とコール位置
などの情報をスタックに積んでいく

機械的にやるならこれしかない
ほぼ再帰と同じ処理になる

機械的にやらないなら場合によっていろいろな方法がある
2020/01/29(水) 13:01:50.34ID:i1SX986la
>>149
太い枝の意味が分からんが、処理の順序が変わってしまうような変更はダメじゃね?
元の再帰のコードが必ずしもその太い枝の順とは限らないし、そもそも木構造とは限らないだろう。
2020/01/29(水) 13:17:09.29ID:p9IYATJW0
再帰の代替なら素直にスタックでやった方が楽だよな。ポインタ1つで済むし
2020/01/29(水) 13:42:07.48ID:HJZ6WUGV0
再帰ではスタックを使うからって
そこで脳硬化症にかかると。。。
2020/01/29(水) 14:08:59.70ID:0fI82nWR0
本物の再帰を実現可能なマシンなんて存在しない
全部はスタックに還元するしか無いんだから
再帰だなんだと騒いでも結局現行のスタックやアドレスでどうにかなるじゃん

本当に再帰でしか書けなくなるのは本物の再帰を実行可能な再帰マシンが出来てからの話
157デフォルトの名無しさん (ワッチョイ ea02-L01+)
垢版 |
2020/01/29(水) 14:21:03.67ID:drvY0wlA0
ここでvoidくんの見解を聞いてみよう
2020/01/29(水) 15:32:00.95ID:iDUguYS70
>>156
よく分からないんだけど、本物の再帰ってどういうもの?
スタックが有限だということを除いて、今のC言語の再帰関数の実現方法と本質的には何が異なるの?
2020/01/29(水) 18:05:30.01ID:pS76hSXZ0
再帰ソムリエの俺からすれば疑似再帰など下の下
本物再帰こそコードに埋め込まれるに相応しい
芳醇な香りと甘酸っぱい味わい
2020/01/29(水) 18:27:48.80ID:HJZ6WUGV0
たとえ64bit空間(16EiB)でも「真の」再帰はできんぞ?
どこかで必ず再帰を諦めるかクラッシュする可能性が排除できない
2020/01/29(水) 18:35:20.80ID:8i6C3PjP0
本物の再帰
真の再帰

次は何が出てくるかな?
2020/01/29(水) 18:50:58.59ID:7jhbc4AI0
(究極 | 至高 | 伝説 | 奇跡)の再帰
2020/01/29(水) 18:56:18.56ID:pS76hSXZ0
俺、斎藤再帰、17歳
今日も玄関から出続ける登校が始まるぜ!
エンドレスナイト!
2020/01/29(水) 18:58:52.17ID:kTgu21G10
>>161
本家 再帰
元祖 再帰
165デフォルトの名無しさん (ワッチョイ 5d35-MzNC)
垢版 |
2020/01/29(水) 19:14:11.95ID:ZN4TcJna0
再起を賭けた戦いが始まる!
2020/01/29(水) 19:34:26.07ID:cVCtJzafM
負けたやつは二度とコード中で再起を使えない
2020/01/29(水) 20:07:17.39ID:kTgu21G10
>>163
定時制ですか?
2020/01/29(水) 20:44:02.49ID:HJZ6WUGV0
再起不能w
2020/01/29(水) 22:19:07.14ID:kTgu21G10
それは歳のせいでしょう
2020/01/30(木) 00:19:52.75ID:oEmB/ijk0
>>170
自己再起
171デフォルトの名無しさん (アウアウクー MM7d-T0fr)
垢版 |
2020/01/30(木) 00:35:40.44ID:v1tZ7RqBM
puts("無限ループやん");
2020/01/30(木) 05:13:48.15ID:cjZm5rKh0
>>160
真の再帰ってなんですか?160がどくじにかんがえたさいきょう再帰ってことでいいですか?
2020/01/30(木) 06:00:39.64ID:gnQ2YSBX0
>>172
必ず再帰を諦めずクラッシュしないという定義が>>160に書かれてあるように、オラには見える。
174デフォルトの名無しさん (ワッチョイ b501-0Ybi)
垢版 |
2020/01/30(木) 07:15:03.02ID:Z7o7STkD0
mainを再帰させるべき。
2020/01/30(木) 07:33:27.84ID:7USHzq/h0
ああ、
そんなコードを書いたことがある
2020/01/30(木) 07:35:18.50ID:7USHzq/h0
少ない文字数で大きな数を作るのを競うヤツで
2020/01/30(木) 10:15:17.82ID:OBUYa7FA0
赤い目を光らせて再起動

I will be back!
2020/01/30(木) 11:34:47.79ID:6JJixhdc0
どっちかつーと溶鉱炉で自分で自分を吐いているT-1000の姿が再帰に近いだろう
2020/01/30(木) 20:32:51.06ID:fVK6hy0p0
お前ら再帰してるときのプログラムの気持ち考えたことあるの?
俺はある
ちょっと恥ずかしいんだよな、自分を省みるみたいで
180デフォルトの名無しさん (ワッチョイ ea02-L01+)
垢版 |
2020/01/30(木) 20:50:43.10ID:XBwSjSkj0
何言ってんだこの馬鹿
2020/01/30(木) 21:25:54.78ID:N4FezhNTM
俺はCPUの気持ちになってるよ。
「ちょ、おま、いまのとこほっといて、またそっち行くわけ?」
「え、戻れるように退避してる?ならいいけど……」
みたいな。
2020/01/30(木) 23:15:18.07ID:OBUYa7FA0
結んでいたはずの命綱をたぐり寄せると全部手元に来てしまったw
183デフォルトの名無しさん (ワッチョイ 9e8c-Witc)
垢版 |
2020/01/31(金) 08:16:18.27ID:Kenfb4Kv0
AIは兵士をメカで作らない。たぶん生物兵器であろう。
ターミネータは嘘っぽい。エイリアンの方が本当っぽい。
2020/01/31(金) 09:16:07.89ID:R8G2m3ys0
アウトランダーズ
2020/01/31(金) 12:32:57.36ID:b8EdwmzO0
アウトランナーズ
2020/01/31(金) 12:37:32.33ID:1BlsaWfK0
アウトフォクシーズ
2020/01/31(金) 18:16:56.63ID:TLQmE8wI0
c言語で書く金融アプリケーションの事例がいくつか知りたいのですが!
2020/01/31(金) 18:23:03.22ID:EyOnVgK3d
>>187
金融なら、Haskell・OCamlでC言語ソース生成くらいグリグリやってんとちゃう?
189デフォルトの名無しさん (アウアウウー Sa21-lBRq)
垢版 |
2020/01/31(金) 19:41:28.40ID:K802DmBra
ないんじゃないかな?
2020/01/31(金) 19:46:08.12ID:k4NtdgGW0
金融アプリケーションって何?
2020/01/31(金) 19:47:08.82ID:xOuBGXY8d
COBOLとか使うヤツ
2020/01/31(金) 21:16:24.88ID:70BTs5bI0
>>187
疑問文なのに何で末尾に!を付けるの?
質問していると言うよりクレームつけてるみたいだなw
2020/01/31(金) 21:29:06.27ID:aVH6lH010
4GLとか使って「COBOLの範疇」で書いたつもりになってるやつらが
縁の下の力持ちを知らないのか無視しているのかどっちでもいいが
悪いが鼻で笑わせてもらってたね

俺が見てた事例ではCじゃなくアセンブラだったが
2020/01/31(金) 21:30:33.47ID:aVH6lH010
元来、俺はそんなに皮肉屋じゃないはずなんだが
連中の上から目線がそうさせていた
195デフォルトの名無しさん (ワッチョイ eaad-Yjow)
垢版 |
2020/02/01(土) 06:47:44.88ID:PlRScEsI0
いや、まあ、CでCOBOLコンパイラ作る事は可能だろうけどね。
2020/02/01(土) 11:17:42.72ID:yTeildyw0
何十年か前、GCCをベースにシステムを作った金融サイトがあることはある
GPLに触れないようライブラリは全部自前で用意してた
端末、サバクラのやり取り、サーバー間のデータ交換、全部Cで作ってた
2020/02/01(土) 11:18:36.53ID:tav2AwxI0
GCC
2020/02/01(土) 12:36:41.04ID:50MDw/OE0
視力検査?
2020/02/01(土) 21:42:14.19ID:BhmlSyWc0
IOCCC
200>>187 (ワッチョイ 1163-+5rw)
垢版 |
2020/02/02(日) 01:07:46.29ID:8cBiUpXt0
みなさんありがとうございます
(googleもみると)あるにはありそうな気もするけど
やっぱあまりよくないのかな。強烈に速度がほしい。
201デフォルトの名無しさん (ワッチョイ 1163-+5rw)
垢版 |
2020/02/02(日) 01:09:27.11ID:8cBiUpXt0
一方でIoTや組込的な決済プログラムは結構あるそうな。
C言語は安心して使えるから好きなんだよね。
2020/02/02(日) 01:19:26.11ID:lNG3EL+m0
業務アプリケーションまで持って行くのが割と大変だと思う
例えばお金の計算させるにしても、概算で良いなんてことは普通無いし
そのライブラリ作っても、信頼性の検証もしないと行けなくなる
預金システムなら、安全堅牢なファイルシステムも工夫しないといけない
趣味や学習として作る分にはとても興味深いものがあるけれど
実用するには、それを得意とするミドルを利用する方が無難だと思う
203デフォルトの名無しさん (ワッチョイ 1163-+5rw)
垢版 |
2020/02/02(日) 02:59:35.06ID:8cBiUpXt0
むむぅ
2020/02/02(日) 07:10:56.28ID:9jRHEnns0
>>202
>お金の計算させるにしても、概算で良いなんてことは普通無いし
今は uint64_t があって、ほとんどカバーできますよ
2020/02/02(日) 07:40:39.94ID:D8WvcGqJ0
なにそのトンチンカンな発言
足し算引き算しかしないと思ってるの?
2020/02/02(日) 07:50:53.39ID:SWo7Ruqh0
1844京6744兆0737億0955万1615円まで扱えるなら
全人類の富を表現できるけど
10銭が循環小数になっちゃ困るね
2020/02/02(日) 09:10:15.49ID:Wawdq7250
10銭を1単位にすりゃいいんじゃね?
表現できる最高金額が1桁減っちゃうけど
2020/02/02(日) 09:12:29.11ID:SWo7Ruqh0
じゃあ1銭は循環小数でいいのかって話
きりねえだろ
2020/02/02(日) 09:18:53.11ID:Wawdq7250
>>208
じゃぁ今現在のシステムではどうなってんの?
2020/02/02(日) 09:20:01.71ID:VB3p6sP1M
>>208
韓国の方ですか?
2020/02/02(日) 09:31:06.07ID:SWo7Ruqh0
>>209
10進数で計算するんだよ、2進数じゃなく
2020/02/02(日) 09:35:04.50ID:Wawdq7250
>>211
そうじゃない
例えば円を単位としたとき小数点以下何桁まで保証してるのかって話
2020/02/02(日) 09:42:25.20ID:SWo7Ruqh0
>>212
それは場面場面で色々だ
任意精度演算ってやつ
2020/02/02(日) 09:47:08.09ID:Wawdq7250
>>213
はぁ?
きりがないんじゃなかったのか?
2020/02/02(日) 09:51:31.13ID:Rn0kkYyt0
一銭二銭、あるいはそれ未満を扱うのなら、uint64_t を固定小数点で使えばいいだけでしょうね

>>205
>足し算引き算しかしないと思ってるの?
お金の計算なんて 9 割が加減乗除で済むのでは?
お金の計算で特に必要で特別な計算ってなにかありますか?
2020/02/02(日) 09:52:20.20ID:Rn0kkYyt0
>>211
10進で計算しなければならない、その必要性はなんですか?
2020/02/02(日) 09:58:14.19ID:PeaPXPNSM
>お金の計算で特に必要で特別な計算ってなにかありますか?

複利計算で累乗
2020/02/02(日) 10:02:09.62ID:0Gqmr5420
>>215
例えば複利計算とかなら小数の計算の精度を厳密に規定しないと問題になるはず。専門外だから詳しくは知らないが、法律か金融機関ごとにでも決められているんだろう。
お前みたいにお金の計算はお小遣い帳をつけるくらいにしか使わないなら整数だけで問題ないだろうけど。
2020/02/02(日) 10:28:42.42ID:8cBiUpXt0
古い言語なのに意外と10進演算ライブラリとかもないですよね
個別に作ってるだけかもしれませんが
2020/02/02(日) 10:37:05.52ID:Rn0kkYyt0
>>218
小数点以下の丸めでは、例えば「五捨五入」のもあるみたいですし
でも「厳密に規定」とかいうほどの難しい方法はないとおもいますよ、普通に固定小数点の整数で問題ないのでは?

>>219
10進演算、って普通の整数の加減乗除とどう違うのですか?
2020/02/02(日) 10:45:51.01ID:j5gc2NvRd
本当に何も知らないんだねQZ
2020/02/02(日) 10:56:35.17ID:/IWX5gyF0
計算機ができる前は人が筆算してたんだよ、勿論10進で
それと合わなきゃならないの
だからBCDとかやるの

精度が確保されてればより正確なんだけど、「本当はこっちの方がより正確です」はダメなんだわ
それまでと変わっちゃダメなの
2020/02/02(日) 10:57:27.98ID:8cBiUpXt0
>>220
色々種類はあると思うけど10進数で小数点を扱えるんですよ
また丸め処理も10進数で出来るのですよ
2020/02/02(日) 11:00:28.10ID:Rn0kkYyt0
>>221
はい、8086 AAA, AAD, AAM, AAS 等の10進補正命令は知っていますが、今から考えても何故にアンパック形式10進なる形式を作ったのか、普通に2進整数+固定小数点では何故だめだったのか、納得できる理由をずっと探しているのです
2020/02/02(日) 11:04:52.03ID:Rn0kkYyt0
>>222
つまり「人の作業との突合せ・検算のために10進演算や BCD があった」ということですか?
でも、そうであっても普通に 2 進整数+固定小数点の演算で問題ないと思うのですが

>>223
BCD で出来る、ということを知りたいのではなく(なぜならばそれはすでに知っているから)、なぜ BCD が必要だったのか、という理由が知りたいのです
2020/02/02(日) 11:23:45.02ID:85W5AYJA0
金融業界の習わしの発端について知りたいなら、それ関係のスレで聞けばいいんじゃね?
金融関係システムが10進で計算してるのは常識なんだし要求要件なんだから
それに疑問挟んでごねるプログラマーにはシステム開発発注したくねぇなぁ
2020/02/02(日) 11:32:34.14ID:nz0OxFB30
単純に考えて、「(10進)小数点以下N桁目で四捨五入する」なんて規定があるときに
2進固定小数でやるのは面倒くさいじゃん。
2020/02/02(日) 11:36:06.33ID:SWo7Ruqh0
>>214
どこで四捨五入するかなんて
プログラムじゃなく経理さんのルールだかんね
プログラマはそれに合わせるってだけのこと
2020/02/02(日) 12:32:50.80ID:VB3p6sP1M
>>228
だったら固定小数点で良くね?
きりが無いなんてことはない
230デフォルトの名無しさん (ワッチョイ 39d2-fhCF)
垢版 |
2020/02/02(日) 12:37:44.03ID:w7N5c9rM0
そもそもお金に0.1円とかないから四捨五入は必要ない
2020/02/02(日) 12:43:11.07ID:SWo7Ruqh0
固定か浮動かって問題じゃない
10進の0.1が2進では0.00011001100110011001100110011...という循環小数になり
金の話では出てこないはずの誤差が出るって話だ

最小単位が1円のときは10銭、10銭のときは1銭が2進演算では正しく扱えない
最小単位をいくらにしても同じことというのをキリがないと言ったんだ
2020/02/02(日) 12:46:55.96ID:VB3p6sP1M
>>231
最小単位以下の誤差なんて累乗計算でも出るじゃん
2020/02/02(日) 12:48:44.37ID:SWo7Ruqh0
>>230
\1,000,500_に源泉税率10.21%を掛けたらいくらになる?
2020/02/02(日) 12:49:20.92ID:SWo7Ruqh0
>>232
誤差の出方が10進と2進では違うって話
235デフォルトの名無しさん (ワッチョイ 39d2-fhCF)
垢版 |
2020/02/02(日) 12:51:06.34ID:w7N5c9rM0
誤差がでてもそれよりすごく大きい数で四捨五入するんだから同じだろ
2020/02/02(日) 12:51:15.29ID:VB3p6sP1M
>>234
性質が違っても誤差は誤差
あんた金の話では誤差は出ないって言ったばかりだぞ
鳥頭か?
2020/02/02(日) 12:56:31.50ID:ceem9FS20
10進数では、1/3 が循環小数で、

2進数では、1/10 が循環小数って、言うだけ!
2020/02/02(日) 12:59:27.07ID:SWo7Ruqh0
>>236
それは間違ってるぞ
同じ計算を他のところ、たとえば税務署でやったら結果が違うなんてことになるとまずいだろうが
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況