C言語なら俺に聞け 149

■ このスレッドは過去ログ倉庫に格納されています
2018/10/28(日) 22:01:44.38ID:D9Gt7gmT0
!extend:checked:vvvvv:1000:512

次スレを作る時は上記1行をコピーして2行に増やして必ず1行目に入るようにしてください。

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言語なら俺に聞け 148
https://mevius.5ch.net/test/read.cgi/tech/1537347410/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2018/11/20(火) 23:35:21.40ID:HgsWcywV0
>>119
何をリテラルにして良いか判断出来ないのは君(または周り)の問題だろ。
独り言ではなく、問題提起〜議論起動する気があるのなら、「俺なりの基準」でも言えよ。
2018/11/21(水) 00:29:46.48ID:Z1qX2lWM0
>>120
>型は変わらないし
つ6.4.4.1

>普通はそのまま
intの最大値を超えているのにどうやって表現する気だ
2018/11/21(水) 00:32:45.26ID:UO6rINaw0
>>122
> intの最大値を超えているのにどうやって表現する気だ
ならお前はdoubleの最大値を超えている場合はどうするんだ?
お前みたいな馬鹿が使うようには出来てないんだよ。
2018/11/21(水) 00:45:36.29ID:w42YOu3l0
釣り針が大きすぎて、咥えられないw
2018/11/21(水) 06:57:26.41ID:sFoC6dALM
>>118
あるあるすぎる…
2018/11/21(水) 09:11:45.73ID:xS7mIekg0
>>118
止めてくれ
その術はオレに効く
127デフォルトの名無しさん (アウアウウー Sa91-AAco)
垢版 |
2018/11/21(水) 09:22:03.70ID:RC0TEAoba
30年ぐらい前にZ80のマイコンボード用に作ったプログラムでそれにハマった覚えがある。
2018/11/21(水) 09:54:03.00ID:PloQSCN7a
すぐ16進で書きたがるのもどうかと思うわ。
intに-1でなくて0xffffffff入れてるのとか意図が掴みかねる。
そもそもunsignedがあるのが良くないんだな。javaは正しかった。
2018/11/21(水) 10:14:15.23ID:nY2eM3rc0
70年代初期に何が良いか何が悪いか何が正解かが分かるの?
それに磁気コアメモリが4096ビットの時代だよ
2018/11/21(水) 10:55:13.30ID:Gzh6p2MJ0
>>125-127
リテラル中に 8 や 9 が入ってれば文法エラーで止まるので判明するけど
入ってないとそのまま通っちゃうし、特に警告の対象になるようなもんでもないしでやっかいよね
2018/11/21(水) 12:33:01.52ID:sFoC6dALM
>>130
今時8進表記なんて使うことはほぼないと思うから使ってたら警告してもいいくらい
2018/11/21(水) 13:31:24.92ID:VldA7vNv0
>>109-116

皆さんご助言ありがとうございます。おかげさまで一応不具合は解消できました。
以下問題の箇所です。

signed int MAX, WIDTH, TMP, SHIFT;
float COEF;

COEF = MAX / WIDTH; //浮動小数点演算になると思っていた
// 1 = 128 / 128

TMP = SHIFT * COEF;
// -128 = -128 * 1

if (TMP > 0)
{式1} //TMP= -128 なのに、式1が実行される。
else
{式2}

だったのを
COEF = ((float)MAX / WIDTH);
に修正すると、式2 も実行されるようになりました。他に変更したところはありません。
今まで何故(-128 > 0)が真だったのかは不明です...
133デフォルトの名無しさん (アウアウウー Sa91-AAco)
垢版 |
2018/11/21(水) 13:55:29.32ID:89fYavxUa
>>132
本当に if の直前で TMP がマイナスだったのかが怪しい。
それと気になるのはやはり型が本当にその通りなのかだな。
2018/11/21(水) 14:13:56.46ID:Gzh6p2MJ0
本当に変数の型は signed なのか?
実際に 式2 に通って欲しいのに 式1 へ流れた MAX, WIDTH, SHIFT の値 をメモって
再現する最小セットのコード作って何が起きてるのか把握しとかないと、また同じことやらかすかもよ

signed int TMP;
signed int MAX = <リテラル>;
signed int WIDTH = <リテラル>;
signed int SHIFT = <リテラル>;
float COEF;

COEF = MAX / WIDTH;
TMP = SHIFT * COEF;
printf("1:%d\n", TMP);
if (TMP > 0) { printf("1:式1\n"); } else { printf("1:式2\n"); }

COEF = ((float)MAX / WIDTH);
TMP = SHIFT * COEF;
printf("2:%d\n", TMP);
if (TMP > 0) { printf("2:式1\n"); } else { printf("2:式2\n"); }
2018/11/21(水) 14:20:55.45ID:HZsG+Ur+a
COEFが0なんじゃ?
まあわかんないね
2018/11/21(水) 22:53:01.43ID:UO6rINaw0
>>132
皆が指摘しているように、それだけでは無いと思うがな。
おそらく君が出してきたソースにも色々間違いがあるんだろうけど。

ソース見る限りズブの初心者のようだが、問題点を理解しているか?

まず用語がおかしいので先にこれを修正しておくが、普通は
float scale = width / max; だ。shiftは足すもの、scaleが掛けるもの。coeffは係数=無次元数だろ。
読んだときに違和感がないようにしろというのはアプリケーションハンガリアンの思想だが、
これを採用するかはともかくとして、思想自体は当たってる。
そして通常は max で割る。(ただしこれについては、意図的に逆数にすることもあるが)
あと変数を全部大文字にするのはマジで止めろ。そんなことしてる奴は居ないだろ。

それで、君の「キャスト忘れ」についてはscaleが0に張り付くなり、整数の階段状になるので、
「動作を見た瞬間にどこがバグっているか分かる」タイプのバグになる。
追跡するにも苦労しないし、そもそも追跡の必要すらない。
当然、疲れもしない。マジで10分で修正して、てへぺろ、だ。

だからそのバグを取るのに手こずること自体がおかしい。
そしてその遠因になっているのはその意味不明なネーミングだ。
まずはそこからだと思うぜ。

(-128 > 0)が真になることはないので、確実に君が何か勘違いしている。
先生/先輩/上司その他、見てもらえる人がいるのなら、
君のソースのその酷さも含めて見てもらった方がいい。
そういう人がいなくて君が一人でマイコンを動かそうとしてるのなら、今の君では無理だと思うぜ。

Python馬鹿なら、最近はPythonが動くマイコンもあると聞くので、環境を変えた方がいい。
マイコン環境のCは、色々と貧弱な分、PC環境のCより難しい。
今の君ではPC環境のCでも無理がある。
状況聞く限り、俺は>>135の予想が正しいと思う。
2018/11/21(水) 23:10:25.75ID:iZ9rHJSw0
ズブの素人が来てよかったね
嬉しそう
生きがいみたいなもんだな
2018/11/21(水) 23:20:56.85ID:ILAAUKO60
歳を取ると説教したくなる
2018/11/21(水) 23:26:10.43ID:0tXjM5tc0
何が起きていたのか本人は追求する気はないみたいなんで
話はこれ以上進まないだろう

>>137
で、それがお前の生きがいなわけだ
なんだかな
140デフォルトの名無しさん (ワッチョイ 9580-CYUw)
垢版 |
2018/11/21(水) 23:48:20.51ID:QmHGv3o90
低学歴知恵遅れが
低学歴知恵遅れ丸だしなレスして
イキイキしてる
2018/11/21(水) 23:57:18.63ID:UO6rINaw0
>>137,138
まあお前らは上達しないと思うぜ。
最近お前らみたいな奴も増えたが。

上達出来るかは結局、自分で深みに突っ込んで行けるかにかかってる。

俺の指摘が間違っている、というのならともかく、
気に入らない指摘は無視すればいい、というスタンスなお前らはプログラマは無理だ。
諦めて他の職を探せ。

132は努力しているようだが、方向を間違っている。
それはお前らにも見えてることだろ。放置するのもまた悪だと思うぜ。
巻き込まれるのが怖くて見て見ぬふりをして、結果、
陰湿ないじめが横行してたゆとりなんてその程度だと思うが。

勿論132も追求した方がいいとは思うが、正直、そのレベルじゃない。
PC環境のCでGUIのIDEを使ってまずCを覚えるか、
既にプログラミング出来るのならその言語、調べたところRubyが動くのもあるようだから、そっちから行った方がいい。
Cも初めて+マイコンも初めて、では、確実にはまる。
142デフォルトの名無しさん (ワッチョイ c380-1YVs)
垢版 |
2018/11/22(木) 00:13:37.04ID:8rnkEr570
こんな低学歴知恵遅れ丸出しな長文レスばっかりで埋め尽くされると
まともなヤツは近づかなくなるわ
やはり自覚がない
2018/11/22(木) 07:53:35.42ID:pCbzIdwz0
>なんだこれ?引数 void って初めて見たぞ。文法的にありなのかこれ?

まーたこのゴミが登場したのか
もう出てけよ
余りにもゴミだからこのスレにはいらねーよ
2018/11/22(木) 13:02:07.52ID:RP03a4vB0
この議論に参加してくださった皆さん

>>136 さんの指摘は初心者の私には大変有難いものでした。
ただ、いくつか反論したい部分もあります。私はハード屋で、ハードウェア言語で使われる変数(フリップ・フロップ)の動作遷移を意識した変数名にした方が私には分かり易いのです。

変数を全て大文字にしているのは単純に昔からの癖です。命令文 = 小文字、引数,変数 = 大文字 と決めています。

「キャスト忘れ」についてですが、異常動作に即気付けるか否かはint 変数をキャストしないと
0,1,2・・・などの整数にしかならないことを知らなければなかなか気付けない事ではないでしょうか。
Cの参考書は持っていますが、浮動小数点演算に関連する情報が離散していて、この事象が起こりうるという説明を見出すことが出来ませんでした。

>>134 さんが提示されたテスト・プログラムは余裕が出来た時に実行してみるつもりです。現在このプロジェクトはほぼ完成しており、細かな調整を残すのみです。ありがとうございます。
2018/11/22(木) 13:18:43.76ID:mBJlqzKNx
>>144
まずは問題解決とプロジェクト完了おめでとうございます。

分かってると思いますが、ここは教えたがりな人、説教したい人、煽りたい人がマウントとり合うだけのスレなので、あまり細かいことは気にせず自分に有用な情報だけ吸収してくださいな。
2018/11/22(木) 13:19:52.16ID:xeK3mO2I0
すごいゲスパーだけど
式1 式2 が実際にはハードからの電圧出力やリレーのON/OFFで
オシレータか分周器書いててオシロで当たったら、どうもデューティーがおかしい
ってなったのかな
2018/11/22(木) 13:46:54.48ID:Q57x8lAMa
Cは型を意識しないとどうしようもないという所はあるよね。
なので、そもそも型変換が入る余地のない、キャストに頼らないコードを書くという強い意志を持つのが大事なんじゃろうと思う。
2018/11/22(木) 15:41:36.24ID:QPQE3Of30
getchar 「型変換?要らないよね?」
2018/11/22(木) 21:29:32.36ID:53EGOrV/0
>>141
おまえの指摘が間違っているかどうか以前に
おまえは何を指摘したんだ?
たとえば「10分」という物理量はどういう計算で出てきた値だ?
テキトーすぎて相手するに値しないんだが
2018/11/22(木) 22:08:04.59ID:/6bysR4g0
>>143
> ワッチョイ ff12
回答無し
だからゆとりは駄目なんだよ

>>149
> ワッチョイ 3308
同上
2018/11/22(木) 22:09:04.67ID:/6bysR4g0
>>144
> ハードウェア言語で使われる変数(フリップ・フロップ)の動作遷移を意識した変数名にした方が私には分かり易いのです。
他文書と同期したいのならコメントに残せ。
ソフトウェアはソフトウェアだけで評価出来ないと管理上問題だ。(大体において同期が取れずに意味不明になる)
そもそもその部分、ハード叩いている感じでもないし。
それ以前にFFの状態遷移でSHIFTも無いと思うが。

> 命令文 = 小文字、引数,変数 = 大文字 と決めています。
これはマジで今すぐ直せ。
大文字にするのは目立たせる為であって、RAMが64バイトしかないような環境ならさておき、
今時ただの変数なんて目立ったら余計に邪魔になるだけ。今時白黒端末もないから、普通は、
命令文(キーワード)=青(色付き)、引数/変数=黒(色無し)、マクロ=全大文字、と大体相場が決まっている。
(そもそもverilogにも大文字文化はない。VHDLには多少有った気もするが…)

> Cの参考書
Cに限らず、プログラミング全般で、入門書/参考書はゴミだ。理由は筆者自身がゴミだから。
海外の参考書は一部達人が書いている物があって、それは参考になるらしいが、俺はよくは知らん。
(ただこれも、昔からプログラミングをやっているのなら常識のはずだが)

> この事象が起こりうるという説明
int/int は端数切り捨てで商のみが返る、というのはCの仕様だ。

> 変数を全て大文字にしているのは単純に昔からの癖です。
言っちゃ悪いが、君は「昔から」というほどプログラミングをやってないはずだ。
昔からやってるなら、マイコンで割り算やfloatを使うこと自体が無いし、
Cの割り算の仕様を知らないこともない。
そしてそのソフトウェアの完成度で良しと出来ること自体が(普通のプログラマからすると)キチガイじみてる。
確実に事故るぞ。
2018/11/22(木) 22:10:24.36ID:/6bysR4g0
>>144(続き)
ただしあまり反発もないところを見ると、ただのゆとり(若者)でもないらしい。
仮に全てを満足出来るプロフィールを定義すると以下となるが、合ってるのか?
・全て大文字とはCOBOL/FORTRAN/BASIC/アセンブラの世界。つまりC以前からであり、プログラミング歴自体は長い。
・Cの基本的仕様を知らない=Cは普段使いではない。
・変数が大文字の方が都合がいい=RAMがほぼ無い4bitマイコン等だとあり得る。この場合、ほぼアセンブラ。
・基本ハードウェア+ちょいソフト(アセンブラ)程度で、今時ならIoTの末端の各センサ等、
 定期的に計測値を報告するようなプログラムはずっとやってきている。
 WatchDogTimerやPowerOnResetを使いまくりなのでプログラム自体はポンコツでもいい。
だとすると、下からCを攻めてきているわけだが、これはほぼ無いパターンだから最初にそれを言うべきだ。

この場合、参考書はK&Rのみで、それ以外は全部ゴミだから捨てていい。
割り算の仕様なら、P13にもろに書いてある。
> Cでは他の多くの言語と同様、整数の割り算では切り捨てが行われて、
> 小数部が切り捨てられてしまうからである。(K&R第2版P13)
K&Rは「既にプログラミング出来る人がCを入門する用」に書いてあるから、
プログラミング自体の入門者には不向きだが、君の場合は最適だ。
一応言っておくが、ハロワがP7、コメントがP11、のP13な。本当にど頭に書いてある。

アセンブラの範囲を超えてCに踏み込んできたのなら、C流の管理方法に合わせた方がいい。
アセンブラの管理方法は、結局はアセンブラの規模用でしかなく、Cの規模には対応しづらい。
アセンブラ修得済みの人がCを修得するのは容易い。
ただし既に言ったように、世の中の「入門書」はそういう人向けではないから、K&R以外は読まなくていい。

とりあえずK&Rを頭から全部一通り読め。それでだいぶ状況が変わるはずだ。
2018/11/22(木) 22:12:40.41ID:BRQlwM1LM
でもvoid君はC言語詳しくないじゃん
2018/11/22(木) 22:14:51.83ID:/6bysR4g0
>>147
× キャストに頼らないコードを書く
○ 『暗黙の』キャストに頼らないコードを書く

だろ。ただ、intをfloatに突っ込むと『精度が落ちる』と警告が出るはずだが。
(少なくともVC++ではそう。gccはこの辺甘々だから駄目かもしれんが)
キャスト自体が悪、というのはC++(というより型安全)の思想だが、
現実的にはCでは『明示的な』キャスト無しではまともに書けない。
ただし、『暗黙的な』キャストは当然無しには出来る。
2018/11/22(木) 23:05:52.65ID:Qbh1A67u0
>>150
10分という物理量と3308はどういう関係だ?
テキトーすぎて相手するに値しないんだが
2018/11/22(木) 23:32:58.42ID:y7NAvobyM
>>154
暗黙のキャスト?
意味わからん造語で語られても困るわ
2018/11/22(木) 23:47:40.88ID:Qbh1A67u0
>>154
> 現実的にはCでは『明示的な』キャスト無しではまともに書けない。

ほうほう
暗黙変換を明示的なキャストにすることで
どんな「現実的」なコードが書けるんだ? おいバカ
2018/11/23(金) 00:18:09.13ID:e/BZMkzC0
>>154, >>156
>暗黙のキャスト
integral promotion?
それとも bcc用語では暗黙の型変換のことですか?
2018/11/24(土) 09:23:26.40ID:I8hvszb00
型変換って割とおこなうとは思うけどなぁ。
2018/11/25(日) 05:17:32.88ID:iX9BTM1g0
確かにintをflotに突っ込むのは型だけ変わるじゃなくてデータも変わるからなぁ
2018/11/25(日) 08:02:06.68ID:rsPEFWOD0
<stdint.h>とかのint8_tとかって
「プログラマが気が付かない整数型に関するミスをコンパイルする段階で(エラーとして)発見できる」
以外に使い道ってか利点ってないよね?
int8_tで定義することでプログラムの速度が上がったりはしないと思ってるんだけど 間違ってる?
2018/11/25(日) 08:15:12.05ID:Euo5liwn0
>>161
速度も上がらないし、そもそもコンパイル時にエラーとしても発見できない。
ただ単にコーディング時や人のソースを読む時にビット数が明確に認識できるだけ。
2018/11/25(日) 08:19:43.85ID:8Uvv4MpL0
(通信プロトコル等の)外的要因でビット数が規定されているものを操作するコードを書くとき
2018/11/25(日) 09:24:44.24ID:rsPEFWOD0
>>162
例えばすごく初歩的なんだけど
uint8_t型で宣言したループカウンタが500回回ったらコンパイルの時に警告でるよね。
……と思って今試したら警告レベルを最大にしてやっと出たわ。

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

int
main(void)
{
for (uint_fast8_t cnt = 0; cnt < 500; cnt++) {
printf("%d\n", cnt);
}

exit(EXIT_SUCCESS);
}
これを
$ gcc -std=c99 -Wall -Wextra -Wpedantic -o inttest ./inttest.c
でやっと注意してくれる。
あれ? なんかもっと良い感じに撥ねられて(不注意な自分には)便利だなと思ったんだが,勘違いだったようだw
2018/11/25(日) 09:53:54.15ID:2C+NPzGbM
>>161
利点というか、1byteが8bitでない環境もあるので、ポータブルなコードを書く場合は他に選択肢がないと思う
2018/11/25(日) 09:55:02.80ID:jMSg79gEa
それはどちらかというと静的解析の仕事じゃないかなあ。
2018/11/25(日) 10:08:42.57ID:i1TAIE2a0
>>164
> ……と思って今試したら警告レベルを最大にしてやっと出たわ。
最大にすれば出るのだから『便利』と言っていい。

警告レベルは自分に合わせて使うものだ。
判断する能力がないのなら、とりあえず最大にしとけ。


>>161
演算速度自体は上がらない。むしろ符号拡張等が必要になり落ちる。(事が多い)
これは通常はintがCPU内部のALU幅と同じ(つまり最速)に設定される為だ。
ただしフットプリントは減る為、キャッシュヒット率が上がり、結果的に速くなることはある。

よく分からなければ、基本的に全部 int で、明確に必要なところだけその他を使えばいい。
(同一ソースでint幅が異なる複数の処理系で動かすというような場合を除く)
2018/11/25(日) 10:15:56.81ID:rsPEFWOD0
>>167
ありがとう。
2018/11/25(日) 12:58:50.32ID:FjBIbaie0
int8_tとか使おうとしているやつ相手に、とりあえずint使っとけとか
どんだけドヤアホなんだよ
2018/11/25(日) 13:25:51.40ID:dxJC+hBBM
>>169
いやint8_tの利点を聞いてる時点で>>167に分があると思うぞ
2018/11/25(日) 14:26:54.92ID:uM/ivlZCa
現時的にはちょっとデータを保存するとかネットワーク越しに外に送るとかした時点でサイズは意識することになるから、intが無難とも言い難い。
意識できてればなんでもいいんだが…
2018/11/25(日) 15:22:16.95ID:iX9BTM1g0
構造体とかにint_8が入ってたらintに入れて計算してint_8に入れて
戻すのがいいのか?
2018/11/25(日) 16:05:11.73ID:FjBIbaie0
よくねえよ
ナローイングになっちまう
2018/11/25(日) 16:11:29.88ID:x3zl9kFB0
計算の途中でint8_tの範囲外になる可能性があるかどうかと範囲外になった場合にどうしたいか次第だろ。
2018/11/25(日) 17:07:06.68ID:iX9BTM1g0
int32_tが最速だけれどsize_tと一緒に使うと型変換がいることで遅くなるんだよな
2018/11/25(日) 17:16:56.38ID:XilAUoVOd
>>175
何が最速化は環境によるのでは?
少なくともfast型のほうが早そうだが
2018/11/25(日) 20:07:43.14ID:74eaLfxV0
ごめんバカみたいな質問なんだけど
その「遅い」っていうのは実行時の速度だよね。コンパイルが遅いってことじゃないよね。
だとすると8の倍数のbit数のCPUでint<8×N>型を使ってもタイムロスって起きない気がするんだけど……。
2018/11/25(日) 21:05:52.83ID:6ChQfOQca
メモリに詰めて格納してると嫌な感じ
179デフォルトの名無しさん (アウアウカー Sa87-ZX3B)
垢版 |
2018/11/26(月) 06:54:36.44ID:xHCVYRaTa
>>177
そういうのはSSE命令とか使うXMMレジスタ使う話。
Intelコンパイラでも無いとアセンブラの話。

単純に上位ビットを0で埋める。(分遅くなる)

ただ、CPUアーキテクチャにも依存する。
95年当時はpentiumは32ビットCPUだが16ビットの方が速く、pentiumU以降で32ビットの方が速くなった。
Core2は32ビットが速く、64ビットは遅く、Core iから64ビットの方が速くなった。
(ハードレベルでも、ただ実装しただけと、最適化したのとある)
180デフォルトの名無しさん (スフッ Sd1f-TETZ)
垢版 |
2018/11/26(月) 14:44:44.56ID:00kzfg0Id
encode.exe
PGM 形式の画像ファイルを入力に与え,Run Length 法によって圧縮したデータを出力す る
decode.exe
encode.exe で圧縮したデータを入力に与え,PGM 形式の画像ファイルを出力する。
これをc言語で書くにはどうすればいいですか?
osはUnix開発環境はMSYS2です。
2018/11/26(月) 15:15:00.32ID:t9INuUY1x
ランレングスと画像フォーマットは何ら関係ないよ。
てかもしかしてランレングスのコードそのものを教えてもらうつもり?
学校の課題は自分でやりな。
182デフォルトの名無しさん (スフッ Sd1f-TETZ)
垢版 |
2018/11/26(月) 15:19:44.48ID:00kzfg0Id
コードはかけたのですがエラーが出ないのに圧縮するとデータサイズが大きくなるはずなのに小さくなります。それがわからないです。
2018/11/26(月) 15:25:50.47ID:t9INuUY1x
>>182
私はあなたの言ってることが分からないです。
184デフォルトの名無しさん (アウアウウー Sa27-ml8p)
垢版 |
2018/11/26(月) 15:27:58.32ID:mDHVgMsLa
元のファイルと出来上がったファイルの中身を16進ダンプしたりして調べれば良いのでは?
それとプログラムもよーく読み直してみな。
2018/11/26(月) 15:36:52.43ID:t9INuUY1x
>>182
圧縮したらデータサイズが小さくなったって悩んでるんだよね?
自分で何言ってるか分かってる??
布団も圧縮したら小さくなるぜ。
186デフォルトの名無しさん (アウアウウー Sa27-ml8p)
垢版 |
2018/11/26(月) 15:44:04.38ID:mDHVgMsLa
Run Length は連続データが少ないと大きくなる事があるからその辺は特に不思議はない。
2018/11/26(月) 15:45:34.47ID:n96xVY2na
でかくなる様なデータで確かめる課題かね?
ちょっとそのまんま見てみたいね
2018/11/26(月) 15:47:36.67ID:t9INuUY1x
>>186
ああ、単純な実装なら確かにそうね。
2018/11/26(月) 18:55:01.13ID:XECRUPoh0
PGMのランレングスは何かしら工夫してんのかな
(行単位で生列とRLを切り替えできるとか? 連続性の強い色空間を選択してるとか?)
2018/11/26(月) 19:58:24.72ID:XECRUPoh0
あー ちゃんと読んでなかった 189 は無しで
191デフォルトの名無しさん (ワッチョイ c380-1YVs)
垢版 |
2018/11/26(月) 22:38:09.76ID:404pxOU70
0バイトのデータを圧縮すると間違いなく大きくなる
2018/11/26(月) 22:54:04.60ID:9UWiUoMZ0
虚数空間にデータを書き移すから、さらに小さくなる、かも
2018/11/26(月) 22:58:35.51ID:XECRUPoh0
ホログラフィーみたいに3次元情報?が2次元に畳み込まれてなんて話ではないんだろう
2018/11/26(月) 23:10:34.44ID:4Tpz9uQJa
単に乱数とかね
2018/11/26(月) 23:21:21.04ID:9UWiUoMZ0
任意のデータをその半分に出来る圧縮技法、誰か考えて
2018/11/27(火) 00:17:38.39ID:sRUlwxGC0
SERNをハックしてLHCでマイクロブラックホールを作ってどうたらこうたらするとかなり圧縮できるよ
2018/11/27(火) 00:21:47.09ID:E9za3JrpM
綴りを間違えるとホワイトホールができちゃうかもしれんぞ
2018/11/27(火) 00:22:04.16ID:ugyzpzqZ0
圧縮は出来ても、復元が出来なさそうw
2018/11/27(火) 01:23:33.76ID:UHpiRGCo0
マジレスすると情報っていうのは消失しないと考えられているので
BH表面にエネルギー運動量テンソルの波動として,飲み込まれた物質郡の属性
(電荷など)が記録される……筈w
少なくとも現状の場の量子論と重力宇宙論ではそういう結論が出てる。
C言語とは関係ないけど,BHを記憶装置として用いるっていう考えは
突拍子もないけど理論的には可能だよねぇ,上記の理屈が正しいとすると。
200デフォルトの名無しさん (ワッチョイ 6f9f-KQkZ)
垢版 |
2018/11/27(火) 01:29:33.86ID:IxTjeZ9T0
みんなが何を言っているのかよくわからない
2018/11/27(火) 02:18:13.33ID:enNfKuoe0
C言語でok
2018/11/27(火) 22:26:43.87ID:/aKqcH8H0
>>195
例えば100bitの長さのデータは全部で2^100種類作ることができる
50bitの長さのデータは全部で2^50種類作ることができる

任意のデータを半分に圧縮できる方法があるとして
100bitで作れる2^100種類のデータをすべて圧縮したなら
50bitの長さで2^100種類の異なるデータができなくてはいけないがそれは不可能
203デフォルトの名無しさん (ワッチョイ 6f9f-zhOP)
垢版 |
2018/11/28(水) 01:13:46.19ID:BkKDQWNJ0
いやいや、ちょっと待て。ここは発想の転換が必要だ。例えば8インチのフロッピーディスクから3.5インチの

いや、なんでもない。みんなには内緒にしておいてくれ。
2018/11/28(水) 02:27:03.19ID:iOF+GVq50
「任意の」データを半分に圧縮できるとすると
圧縮した後のデータもさらに半分に圧縮できるはず
そうやって圧縮を繰り返せば最後には全てのデータは1ビットになる
よってそのような圧縮法がないことは明らか
可逆でないならそれでもいいかw
2018/11/28(水) 05:46:42.41ID:N04UITTm0
しかしソースコードとかって圧縮率高いよね。
やっぱり同じような文字が続いたりインデントに空白文字が続いたりするからだろうか。
2018/11/28(水) 07:08:14.21ID:82iiMHmWa
コルモゴロフの複雑性もあります
207デフォルトの名無しさん (ワッチョイ ffd2-f63u)
垢版 |
2018/11/28(水) 09:24:07.52ID:seMAmMUm0
そこでTHCompですよ
2018/11/28(水) 09:40:55.66ID:0XeeIlyH0
情報のエントロピー
2018/11/28(水) 13:43:56.99ID:rECr01ZDM
今から趣味でプログラミング始めます!激励してください!!
2018/11/28(水) 17:27:07.00ID:N04UITTm0
悪いこと言わないからPython3やれ
2018/11/28(水) 17:57:49.24ID:Vqd4vFOqM
趣味で初プログラミングなら、俺からもpythonを勧める。
GUIが手軽だとモチベーション違うよ。
2018/11/28(水) 18:00:54.28ID:rECr01ZDM
分かった!いやよくわかんないけどそっちから始める!
XCodeでできるかな、ありがとう!
2018/11/28(水) 18:48:28.91ID:N04UITTm0
$ brew install python
とやって
$ python
これで起動する。もうスレチだし「macOS Python3」とかでググれ。
214デフォルトの名無しさん (アウアウウー Sa27-ml8p)
垢版 |
2018/11/28(水) 19:51:31.92ID:wHjpMIAFa
Kotlinもよろしく
2018/11/28(水) 20:05:07.50ID:Vqd4vFOqM
まだマイナーすぎ。入門書があふれてきたら推すよ
2018/11/28(水) 22:31:15.42ID:xsmtECg3a
ttps://bituse.info/c/kadai/44

上記のサイトなどを参考に
簡単な九九の表を作ると

1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15...
...
...
(略)


このようになると思いますが、

隣の数字を参照にして足して
3 5 7 9 11 13 15 17
6 10 14 18 22 26 30 34
9 15 21 27 33...
...
...
(略)


と、表示するには上記のサイトの様なプログラムをどのようにすれば良いのでしょうか?
宜しくお願いします。
2018/11/28(水) 22:37:30.42ID:IOIePrN/0
>>216
死ね
2018/11/28(水) 23:13:58.25ID:MBR3DrMT0
puts("3 5 7 9 11 13 15 17\n");
puts("6 10 14 18 22 26 30 34\n");
puts("9 15 21 27 33...\n");
2018/11/28(水) 23:24:49.65ID:30WXuBf5p
>>218
puts は改行するので、文字列の末尾に \n を付けると2回改行することになる
2018/11/28(水) 23:26:32.45ID:MBR3DrMT0
あっー  指摘ありがと
■ このスレッドは過去ログ倉庫に格納されています