C言語なら俺に聞け 152

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (アウアウウー Sa4f-7DQ/)
垢版 |
2019/06/17(月) 18:27:10.41ID:3L1/L9kLa
!extend:checked:vvvvv:1000:512
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/
-
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
※前スレ
C言語なら俺に聞け 151
https://mevius.5ch.net/test/read.cgi/tech/1554171817/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2019/06/23(日) 18:09:08.51ID:6tta8QXL0
>>44
回答してもらって納得するよりも、
自分でやる方が遙かに勉強になる
ヒントだけ書いておこう

数値の内部表現を調べて、演算仮定を追いかけ
計算結果の内部表現を見て、それを10進表示に戻す

以上を追いかけていけば自ずと回答がでる
2019/06/23(日) 18:17:35.42ID:CFRhe1LU0
>>41
今時ググればいくらでも情報あるから自分で調べる気があるならキーワードだけで充分だろ
47デフォルトの名無しさん (ワッチョイ d9d2-NSwX)
垢版 |
2019/06/23(日) 18:18:38.46ID:QCIWb8Wa0
みんなこの質問に答えると中出しセックスできると本心では思っているからなかなかおしえてくれないよな
中出しセックスができなくなるアニメとかゲームとかパソコンの質問は簡単に教えてもらえるよ
48デフォルトの名無しさん (ワッチョイ db02-WXYe)
垢版 |
2019/06/24(月) 00:03:38.49ID:JSF3ka2M0
>>19
普通はCは浮動小数点を内部で2進数で扱っているため。
10進数で歯切れのよい数でも2進数では循環小数になったりして割り切れない値になることがある(例えば10進数で 0.1 は2進数では 0.00110011...という循環小数になる)。そうなるとどうしても10進数文字列への変換で近似値にしか変換できない。

では最初から内部も全て10進数で全て計算すれば良いではないかと思うかも知れないが、それではコンピュータ内部での計算が遅くなる。
遅くなってでも正確さが必用とされるお金の計算等はそれ用のコンパイラまたはライブラリを使用して実現する(あるいはC言語ではないそれ用に設計された言語を使う)。
デフォルトではCは誤差が出てもいいから素早く計算出来る状態になっていると考えて良い。
2019/06/24(月) 01:06:30.65ID:zV4JNsEga
cでデシマル型ってあんの?
2019/06/24(月) 03:15:28.63ID:eqHVB1zL0
ない。
5118 (ワッチョイ 93b9-br4T)
垢版 |
2019/06/24(月) 05:23:21.67ID:218UFAwP0
http://home.a00.itscom.net/hatada/c-tips/lint01.html
こういうものでチェックしたら完全にクロスプラットフォームになるの?
ifdefとかなしで?
2019/06/24(月) 07:23:45.27ID:zxVE+D4VM
>>48
> では最初から内部も全て10進数で全て計算すれば良いではないかと思うかも知れないが、それではコンピュータ内部での計算が遅くなる。
それ以前に1/3ってやられたら同じことになる
10進数だと内部形式と外部形式で変換誤差が出ないだけで計算にまで言及したら10進数も2進数も同じだよ
2019/06/24(月) 09:50:57.10ID:Ih+U6NjR0
要は有効桁数を意識してりゃいいんだよ
それ以上の制度が欲しいなら専用ライブラリ使えばいい
2019/06/24(月) 11:14:12.23ID:UiRTkeqO0
2進数で計算する方が悪い
ちゃんと10進数で計算するライブラリを使え
2019/06/24(月) 12:10:10.27ID:K2wdCfDba
>>54
53の言ってる意味わからんでしょ
2019/06/24(月) 12:34:02.56ID:yt8SVBnP0
>>49
http://www.open-std.org/JTC1/SC22/wg14/www/docs/n1312.pdf
57デフォルトの名無しさん (アウアウウー Sac5-5X+l)
垢版 |
2019/06/24(月) 12:50:07.91ID:6xXOOyfaa
>>52
そうだね。

>>53
そういう事だな。
2019/06/24(月) 13:01:39.05ID:KbxaxfSBM
有理数で計算するライブラリを使えばいい。
パイ?何それおっぱいのこと?
2019/06/24(月) 13:12:08.72ID:BrGul7Md0
有理数計算は実装してみれば分かるが圧倒的に遅いからな

無理数はどうやって実装するのか知らん
60デフォルトの名無しさん (ワッチョイ d9d2-NSwX)
垢版 |
2019/06/24(月) 15:14:23.48ID:KYWI3ygZ0
有理数で計算したあと最後に無理数に直すところで一番最後が4になったらどうするんだよ
2019/06/24(月) 15:23:01.79ID:HSUghupZx
>>60
4を引けばいいじゃない。
2019/06/24(月) 15:23:13.21ID:zV4JNsEga
無理数って円周率とかeだろ?
違ったっけ?
63デフォルトの名無しさん (ワッチョイ d9d2-NSwX)
垢版 |
2019/06/24(月) 15:30:42.35ID:KYWI3ygZ0
有理数じゃなければ無理数だろ
2019/06/24(月) 16:31:31.15ID:Ih+U6NjR0
メモリが有限である限り無理数を厳密に表現するのは不可能だよ
65デフォルトの名無しさん (ワッチョイ 93b9-br4T)
垢版 |
2019/06/24(月) 16:33:17.68ID:218UFAwP0
C言語でWebAssemblyできるみたいだけど
ハードウェアに近いとこでもなければC言語は使わないほうが良いイメージだけど
実際WebAssembly的にCはどうなんだろうか?
2019/06/24(月) 16:44:03.34ID:T0z2fm5aa
>>64
数値演算に拘ならければ数式処理でπはπ、√2は√2のままで計算できるだろ。
2019/06/24(月) 16:50:34.10ID:Ih+U6NjR0
>>66
だから「厳密に」って言ってるじゃん
πは14桁で事足りるし31兆行も必要ないからね
2019/06/24(月) 16:52:25.55ID:Ih+U6NjR0
>>67
31兆桁ね
2019/06/24(月) 16:58:47.67ID:Vk3kXnxv0
> πは14桁で事足りるし
ぐるぐる回転するとだんだんずれてくる
2019/06/24(月) 17:08:19.82ID:Ih+U6NjR0
>>69
なら必要な精度だせばいいじゃん
2019/06/24(月) 17:09:23.06ID:T0z2fm5aa
>>67
いや、そうではなくて数式処理ならメモリ有限でも厳密に表現できるんだけど。
なんか俺変なこと言ってる?もしかして議論噛み合ってない?
2019/06/24(月) 17:13:52.11ID:Ih+U6NjR0
>>71
πはπとして表現するってことね
そりゃそうだよね
73デフォルトの名無しさん (ワッチョイ d9d2-NSwX)
垢版 |
2019/06/24(月) 17:15:00.84ID:KYWI3ygZ0
>>71
数式でいいなら紙に数式を書けばそれが答えじゃないのか?
74デフォルトの名無しさん (ワッチョイ d9d2-NSwX)
垢版 |
2019/06/24(月) 17:18:50.20ID:KYWI3ygZ0
でもpiを1として考えたら1が1/piになるんじゃないのか?
2019/06/24(月) 17:25:35.31ID:T0z2fm5aa
>>73
そりゃ紙に書いて数式演算って言い始めたら数値演算も紙の上でできるでしょ。
俺の言ってるのはMathmaticaのような数式処理。
2019/06/24(月) 17:32:02.39ID:3Q+jRQuy0
建築設計や土木設計の時の数量計算なら、数字を出さないといけませんよ
2019/06/24(月) 17:34:05.13ID:S0Qqu87l0
最終的に望む精度で出せばいいだけでは
78デフォルトの名無しさん (ワッチョイ d9d2-NSwX)
垢版 |
2019/06/24(月) 17:34:44.59ID:KYWI3ygZ0
>>75
じゃあはじめから紙でいいだろ
79デフォルトの名無しさん (ワッチョイ d9d2-NSwX)
垢版 |
2019/06/24(月) 17:37:46.46ID:KYWI3ygZ0
紙が足りなくなってきたら最初の方から消しゴムで消していけばいいだけだからいつかは書き終わるだろう
2019/06/24(月) 17:47:35.39ID:Ih+U6NjR0
半径5の円の面積求めなさいって言われて
78.5... と数値として答えるか 5^2*pi と数式で答えるか
俺は数値の精度の話をしてたんだよ
2019/06/24(月) 17:53:40.54ID:HRlrDhQRa
数値にしたら負けだよな
2019/06/24(月) 17:55:12.54ID:7zvW/rVQ0
BCDコードは流行りませんか?
2019/06/24(月) 18:08:31.47ID:BrGul7Md0
有理数を実装すればいかなる整数m, n に対しても m / n * n がきちんと m に戻る
(decimal型でも普通無理)
同じようなことを無理数でやる方法がわからんって話よ

無理数が厳密に数値化できないなんて誰でも知ってる話はせんわ
2019/06/24(月) 18:30:26.02ID:Ih+U6NjR0
>>83
現実問題としてそんな厳密解は必要がないってことだよ
だから数値の精度の話したんだけどな
NASAはπ15桁で軌道計算して誤差は約12cmだってよ
2019/06/24(月) 18:34:28.07ID:BrGul7Md0
>>84
「そんな厳密解は必要がない」ってのはお前の信条だろ
お前の信条を話に混ぜられても困る
2019/06/24(月) 18:37:48.29ID:Ih+U6NjR0
>>85
どこに俺の信条があるんだよw
じゃあ何が問題なのか具体的に言ってみろよ
2019/06/24(月) 18:39:33.96ID:BrGul7Md0
>>86
俺「どうすれば実現すればいいのかわからない」
お前「そんなものは必要ない」

話になってない
2019/06/24(月) 18:40:08.00ID:BrGul7Md0
「どう実現すればいいのかわからない」だった
2019/06/24(月) 18:40:45.27ID:Ih+U6NjR0
>>87
何を実現したいのよ
2019/06/24(月) 18:42:33.59ID:BrGul7Md0
>>89
計算の中で無理数を無理数として処理したい

最後に数値化したいならそのときの誤差だけは許容する
2019/06/24(月) 18:43:40.86ID:Ih+U6NjR0
>>90
じゃあ数式処理でいいじゃんw
2019/06/24(月) 18:46:56.46ID:BrGul7Md0
>>91
その数式処理をどうやるのか知らないって話なんだが
2019/06/24(月) 18:48:23.44ID:Ih+U6NjR0
>>92
>>75が言ってるじゃん
Mathmaticaでも使えば?
2019/06/24(月) 18:50:18.95ID:DSBJ/2Do0
Mathmatica 的に数式処理したいならそういうパーサーを書いてだな…
解析解が求まるといいですね (lol
2019/06/24(月) 18:50:43.29ID:oK/rIQPyd
C++ 数式処理ライブラリ
で検索。
2019/06/24(月) 18:51:36.46ID:BrGul7Md0
>>93
Mathmaticaいくらすると思ってんだよ…
2019/06/24(月) 18:53:18.44ID:BrGul7Md0
そもそもどう処理してるのか興味があるだけなんだがな
OSS漁ればあるかな
2019/06/24(月) 18:53:43.02ID:Ih+U6NjR0
>>96
じゃあお前が書けw
お前ならできる
99デフォルトの名無しさん (ワッチョイ d9d2-NSwX)
垢版 |
2019/06/24(月) 19:07:01.18ID:KYWI3ygZ0
「数式処理ソフト」と紙に書けばいいんじゃないのか?
2019/06/24(月) 19:23:05.36ID:T0z2fm5aa
>>80
やっぱり議論が噛み合ってなかったね。
俺は厳密解の話してたわ。
無理数が有限メモリで表現できないからの数式処理なら表せられるの流れだったのでまさか数値解の話で止まってるとは思わなかった。
2019/06/24(月) 19:26:15.32ID:6eeWUnLH0
「計算のステップごとに増えてく誤差の蓄積」と、
「最後に(それまで記号的に扱うことで保留していた)
無理数や無限小数を実際の数値に直す際の誤差」と、
話がゴッチャになってるでしょ。
2019/06/24(月) 19:27:51.25ID:Ih+U6NjR0
>>100
数式で表現できるのは当たり前だし
そんな当たり前の話されてもって感じだったわ
2019/06/24(月) 19:29:37.69ID:3Q+jRQuy0
ここはC言語のスレですよ
数式処理スレじゃないです
2019/06/24(月) 19:33:07.57ID:T0z2fm5aa
>>102
なら最初からそう書けばいいのに、何で数値解にこだわったの?俺は最初からこだわらなければと書いてるけど?
2019/06/24(月) 19:35:48.83ID:3Q+jRQuy0
C言語で扱えるのは数値解でしょ
それ以外はスレ違いのテーマ
2019/06/24(月) 19:38:12.07ID:Ih+U6NjR0
>>104
こだわりなんてないけどね
πは数式でπと表現するなんて当たり前だから
当然、無理数の数値表現の話だと思っただけだよ
2019/06/24(月) 19:40:21.01ID:Ih+U6NjR0
>>105
その通りだね
2019/06/24(月) 19:44:36.26ID:rEOVCAEx0
>>106
無理数を有限の有理数表現するなんて、議論するまでもないじゃんw

>>105
そだね、俺はMahmaticaのような数値処理をC言語で実装すれば無理数も有限メモリで扱えるよ、と言いたかったんだが、議論がスレチになったのでもうやめます。
2019/06/24(月) 19:47:11.95ID:Ih+U6NjR0
>>108
その当たり前を分かってないからこうなってるじゃんw
2019/06/24(月) 19:49:56.29ID:SbfV+wvC0
>>51
lint 前提のコードは、変てこなキャストとかが多用されているので、私は好きくない
(void)fclose(fp);
とか
2019/06/24(月) 19:54:09.43ID:SbfV+wvC0
多桁長演算は、私もすごく欲しくて遂には C++ で書いてみました
これさえあれば、有理数ライブラリもすぐに書けるでしょう
https://mevius.5ch.net/test/read.cgi/tech/1434079972/51

無理数は無理ですが
2019/06/24(月) 19:56:21.02ID:rEOVCAEx0
>>109
ま、ここではよくあるコミニュケーションエラーだったね。
建設的な議論になりそうにないので、もうやめとこ。

俺は数式処理にMathmaticaしか使ったことないけど、オープンソースでMaximaってソフトあるね。
どういう実装になってるのか今度見てみよう。
2019/06/24(月) 19:58:51.26ID:zV4JNsEga
数式処理はコンパイラ書くのと同じですよ。
記号操作なんだから、ある意味コンピュータの仕事の本質です。数値よりも。
2019/06/24(月) 20:00:22.77ID:zV4JNsEga
あと、mathematicaは任意桁の誤差なしの数値計算もできるけど、そっちはGNUのライブラリ使ってたのではないかと。
2019/06/24(月) 20:07:45.26ID:Ih+U6NjR0
Axiomってのもソース読めるな
探せば色々でてくる

パーサ書くなら昔はlexとyaccが定番だったけど今は何使ってるのかね
2019/06/24(月) 20:09:05.85ID:zxVE+D4VM
>>109
いや、わかってないのはお前
そもそも数式処理って最後に数値なんか出さないし
大学で(一般教養としての)数学やってないの?
2019/06/24(月) 20:12:05.34ID:Ih+U6NjR0
>>116
ああ、わかったわかったw
後出し多くて疲れるわw
2019/06/24(月) 20:14:52.08ID:rEOVCAEx0
>>115
俺はむしろ数式処理はPrologのようなパターンマッチングやってると勝手に思ってる。
知らんけど。
2019/06/24(月) 21:54:22.85ID:f0ou4boT0
>>117
えっ、後出し?
マジで>>66の言ってることを理解できてなかったのかよ…
もしかして入試問題が「直径1cmの円の面積を求めよ、ただしπは3と仮定する」みたいな学校にしか入れなかったのか?w
2019/06/25(火) 01:19:55.45ID:eaNcyZwN0
πの定義って本当は難しいではないかと考えるようになりました…
2019/06/25(火) 01:28:22.57ID:uTzXwYL5M
定義そのものは単純
円の直径と円周の長さの比
2019/06/25(火) 01:34:45.27ID:eaNcyZwN0
>>121
円周の長さって曲線ですよね
曲線の長さ…んー、曲がっているのに長さ?
「円周の長さが存在すると仮定したら」円の直径と円周の長さの比である、なら理解できなくもないのですけれども
2019/06/25(火) 01:51:31.50ID:9pz2xub80
え?
2019/06/25(火) 02:12:37.49ID:F7MMtx7f0
>>122
もうC言語に関係のない話題なんだから黙ってろよ
125デフォルトの名無しさん (ワッチョイ db02-WXYe)
垢版 |
2019/06/25(火) 03:38:38.87ID:t3KmtNcy0
えーと、>>19から延々と話が続いてんのかな?
2019/06/25(火) 03:58:09.25ID:XPL9ybbga
引数にvoidを指定したときから続いてる
2019/06/25(火) 06:03:41.53ID:JYAeHTmF0
>>64
いや可能だよ
おまえさんがそう発言しているのは
有限のメモリを使って表示されている電子教材に厳密な定義が書いてあるからだ
それはおそらく自然言語で書かれたものだろうがCに翻訳するのはおまえさんの仕事だ
2019/06/25(火) 15:14:34.88ID:9pz2xub80
ホラーだなw
129デフォルトの名無しさん (ワッチョイ d9d2-NSwX)
垢版 |
2019/06/25(火) 16:03:33.62ID:AVCUyi6k0
いま気づいたんだけどgccの拡張使えばC++のテンプレート的なことできるな
130デフォルトの名無しさん (アウアウウー Sac5-5X+l)
垢版 |
2019/06/25(火) 16:10:30.14ID:AwR7wU0da
素直にg++を使えばいいような・・・
2019/06/25(火) 16:24:43.72ID:Z38gwzpf0
>>129
させねーよ・・・
132デフォルトの名無しさん (ワッチョイ d9d2-NSwX)
垢版 |
2019/06/25(火) 16:35:26.91ID:AVCUyi6k0
>>131
どいうこと?
133デフォルトの名無しさん (ワッチョイ 9384-F2Fz)
垢版 |
2019/06/26(水) 02:05:22.90ID:alD8Bem60
このMSの新コンソールのデモビデオ
https://youtu.be/8gw0rXPMMPE

編集してるのは C のソースのように見えるけど
"<=" を "≦" に変えたり、"==" を "=" にしたりとか何の冗談だろう
それとも本当に こういう文字も OK になるのか?
オレが知らないだけで すでに OK なのか?
2019/06/26(水) 02:17:04.58ID:dK4c3UqUM
お前が知らないだけ
2019/06/26(水) 02:19:08.09ID:dK4c3UqUM
リガチャでググれ
2019/06/26(水) 02:38:59.73ID:alD8Bem60
>>134-135
ググった。どうも
Unicode のリガチャ? とすると見かけだけではなくて、ファイルに格納したときの文字コードも
変わるってこと?
ていうか最近の C コンパイラはそれを認識するのか?
2019/06/26(水) 03:00:34.30ID:alD8Bem60
>>136
自己れす
考えるに、やはり見かけだけのことだな
CSS のスタイル指定と同じことをやってると
138デフォルトの名無しさん (ワッチョイ d9d2-NSwX)
垢版 |
2019/06/26(水) 05:32:18.41ID:vCLnuco30
fira codeっていうのがあってな
emacsでもつかえる
2019/06/26(水) 11:01:02.69ID:kpnHwXwW0
行書体フォントは合字で見映えを変えてるだけだな

嵯峨本フォント公開 - Togetter
https://togetter.com/li/691328
2019/06/27(木) 18:52:32.86ID:tbUThdPVa
>>64

3.1415926535897... ≒ 3.14

これだけの話
2019/06/27(木) 19:26:18.86ID:fhoZJ8gK0
>>96
raspberry piからなら無料で使える
raspberry pi 4も3日くらいまえに発売された
142デフォルトの名無しさん (アウアウウー Sa11-jhwL)
垢版 |
2019/06/27(木) 21:23:07.41ID:tw9eT+4Xa
およそ3
143デフォルトの名無しさん (ワッチョイ b982-bYGp)
垢版 |
2019/06/27(木) 22:09:24.03ID:E9QSvqb40
C11を使っています。

#include <stdbool.h>

void main( void)
{
int cnt = 0;
bool hoge = false;

while( !hoge){
if( cnt++ >= 10) hoge = true;
}

このような感じのコードを実行したところ、ループから抜けません。
stdbool.hにはtrueが1と定義されているので、10回ループを回ると
while(!1)と同じ状態になると思います。

これはfalseと等価とは扱われないのですか?
2019/06/27(木) 22:17:33.62ID:xVmqmc55a
C11とは
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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