はてなキーワード: 演算とは
例えばキャッシュレスだが、お店側からすると売上が増えるわけでもないのにレジに投資しないといけないし、数%マージンを持っていかれる。
消費税を数%上げるだけで経済シュリンク効果があると言っている人でも、キャッシュレス推進派がいてどう考えているのかわかりにくい。
全体のパイが増えていっている中で、消費者目線で利便性が上がるのは大歓迎だが、そうなっているだろうか。
アメリカ大手テック業界がコングロマリットを推し進め、定義を曖昧にして市場規模が大きくなっているように見せるが、日本じゃ通用していない。
中間業者をなくそうという動きはずっとあったが、テック企業が単に中間に入ってマージンを取るようなビジネスモデルしか持続できない。
これからはソフトとサービスの時代だとずっと言われてきたが、投資した物が後に残らなかったり、米テック企業に振り回される。
ソフトはずっと更新し続けるものかもしれないが、ずっと外因や一部企業に振り回される。
1国内でとどまらずグローバルで展開出来ること以外に強みはないのではないか。
船や飛行機より通信は早く、税関でのチェックや複雑な仕組みに対応しなくていいのが強みではないのか。
日本で、これからはソフトとサービスの時代だと言っている間に、1周回ってハードの時代になってないだろうか。
Googleやフェイスブックやマイクロソフトは大量のサーバーを持っている。
Googleなんてエッジが大事だと言いつつ、客が端末代と通信費代を払ったAndroidで、皆が寝静まり充電している端末を使って演算するだろう。
Appleは似たような体系の企業は他にあるが、あそこが強いのは他社に自社有利な契約を飲ませているからで、有り余る金がないと真似できない。
テスラもソフトウェア的な設計を機械設計に持ってきたところばかり注目されるが、ハードに投資しており、AIが必要だという話になれば自社半導体を作るところから手を付けている。
賃金が高ければ消費者になれ、国内に消費者が多ければ機械化で生産したものが消費される。
東京近辺のような賃金は高くなったが居住空間が狭く、消費は限定的で投資に向かい、巡り巡って不動産に金が流れ、賃金上昇よりも家賃上昇速度が早く、
格差が広がっていくのは辛くないだろうか。
これ自体がプログラミング言語の機能だと思ってるんじゃないかと
だからXORについても、なにかプログラミング言語の力で「左辺だけで演算結果を得られる方法があるのでは」という発想が出るんじゃないかと
左辺だけで結果がわかるというのは数学的な性質であって、言語は、数学的な性質に基づいて無駄な計算(右辺の評価)はしない、という動作をしているに過ぎない
プログラミングの基本的手法の1つに、論理演算というものがある。
これは真偽値(真=true、偽=false)同士の組み合わせを評価し、結果をtrue/falseで返すというものだ。
この演算のための演算子の代表的なものがANDとORで、それぞれ論理積と論理和という。
式aとbにtrue/falseのいずれかが定義されているとして、
a AND bだったらaとb両方がtrueのときのみ、演算結果がtrueになり、
a OR bだったらaとbいずれかがtrueであれば、演算結果がtrueになる。
ということは、
ANDの場合は左辺の式がfalseの時点で、右辺を評価するまでもなく演算結果はfalseとなり、
ORの場合は左辺の式がtrueの時点で、右辺を評価するまでもなく演算結果はtrueとなる。
これを短絡評価といい、今どきのプログラミング言語では必ずこの仕掛けが実装されていると。
これは排他的論理和といい、演算子の右辺と左辺の結果が違う組み合わせの場合のみtrueとなる。
つまりa=trueかつb=falseの場合か、a=falseかつb=trueの場合のみ、演算結果(a XOR b)がtrueとなる。
問題は、どういうわけかこのXORには短絡評価が存在しないのだ。
どのプログラミング言語を調べても短絡評価がないので、かなり驚いている。
一体どういうこと?
(追記)
前回から何か新しい物が生まれているのかがわからず、正直困惑している。
前回の失敗は、「不動産」と「なにか新しいものがある場を提供出来なかった」のが原因だったと思っている。
「不動産」は、3Dの街データで人が集まりやすい所に対して、広告費をつぎ込むなどだ。
「なにか新しいものがある場を提供出来なかった」は、一度作った町並みがずっと変わらないので、新しいものがないので飽きる。
そしてリアル空間よりも人が集まらないとお金にならない。それこそ国境を超えないといけない。
人が集まるには、そこにいけば新しいなにかがなければならず、量産しやすいニュースだったり、そこそこのクオリティで暇つぶしできる動画やゲームが必要になった。
1度作った街並みは大半の人が飽きても残ってしまう。
消費するよりも多くの物が提供されるならいいが、以前のメタバースだとそうはならなかった。
街並みもビルの外見はあるが、中のお店が充実しているというのもない。
お店の中で並ぶ商品の数は少なく、現実の100円ショップのような商品数もない。
コンピュータの演算能力は増えたが思っているよりも増えてないのではないだろうか。
アバターにしてもローポリでテクスチャで陰影を頑張る方向のままだ。
この文章では特に何かを問題視して、解決しようとはしていません。別にそれで良くて、俺も世界に何かを望んではいない
でも少しくらい寂しさがある
都内一人暮らしの男性向けに気軽に入れる店。とやらの広告があるけどそこには気軽に食べたりサクッと飲むのに丁度いいとか書いてる
私は西友の弁当を食べて水道水飲んでる。アルコールアレルギーで酒は飲めない
なぜこの私がその店に興味あると思ったのか。広告をレコメンドしているAIが雑といえば、まあ納得できると思うけど、けしてそれだけではないんだよ
そもそも私にフィットする既存の経済活動が極端に少ない。世界一周旅行もポルシェも興味ない。旅行はしないし、運転免許は持っていない
自転車保険?自転車もってないよ、GoogleのGPS機能有効にしてるんだからそこから情報とってくりゃ、俺が日がな近所の公園を何キロも徒歩で散歩しているのはわかるだろうが、そういう情報と連動していないんですかね
GPSと広告連動していないのは、Googleの良心として受け取っておきます
つまり、自転車も乗らないし一日に1時間も瞑想したり散歩したり、酒が飲めない男向けの経済活動がこの世に存在しないんだろう
俺が最近お金使ったのはぶっ壊れたソニーの3万円位するイヤホンとMacBookProの買い替えだけだしな
そういう商品ってわざわざスポットの広告いれて売れるようなものじゃないから、広告に表示されないのはわかるし、一度買っただけで同じ商品を何度も広告に出されたらそれこそ発狂するので、これらの商品が広告に出ないのは当然なんだけど
興味のある広告が一つも無いの、世間から見放されている感があるなぁ。どちらかと言うと自分が世間を見放してしまったので、大抵のことに興味が起きなくなっているだけなのかもしれない
冒頭で寂しさと書いたけど思い返すと少し違うかもしれない、こういうのをわびしいって言うのかもしれない
なのでメダルゲームのスマホアプリインストールして脳死状態で延々とルーレットまわしている
外周の抽選では1/3、中央の皿には最終抽選に進むための穴が中央にあって、体感的に1/5くらいの確率で入る感じ
ラッシュチャンスでは5/6のあたりを引き続ける限りWIN倍率が積み上がっていく。
計算するとラッシュチャンス到達までの確率は、 1/3 * 1/5 * 1/8 なので 0.8%くらい
実際は中央の更にボールをHOLDしておいて、1/8 抽選でボールを3つ使える場合があるので、体感的にはラッシュ突入までの確率は1%以上は確実にあると思う
そんで、ラッシュ突入では (5/6) ^ N でN連チャンで連チャン数が上がるたびに確率が低くなっていく、多くの場合は5連チャン(40%)くらいまでなら行けるけど、まあ体感的に5連チャン引けないこともよくある
10連チャンは (5/6) ^ 10 で16%くらいなんだけど、脳死状態で抽選機を回し続けてるせいで16%とかめちゃくちゃ確率高いじゃん。っていう思考になってきている
でも実際の抽選は物理演算のルーレットを使ってるし、過去のボールが穴を塞いで確率がかわったりするので数字のとおりではないよなとか、
しかも穴を塞いでるからって別に確率が上がるとも限らないよなーとか。あたり穴の前後の穴が塞がれた場合は、はじかれたボールがアタリに入る確率上がるけど、ハズレ穴に囲まれたハズレ穴が塞がれただけだとそのハズレ穴にボールがきたとしても左右のハズレにボールが流れるだけなので実質的にはハズレが減ったとはみなせないよなあとか
そういうことして生きてる
ただのスマホゲームですらこんな感じなので、現金賭けるカジノやったら完全に脳が焼かれるでしょう
そういう広告が出てなくてよかった
それが必要なんだよ。たとえば f(x) という関数があって、f(2) = 4 に束縛されたらメモリ上では定数にできて嬉しいのだよ。最近だと、イミュータブルっていうやつで。既存の Ruby や C だと、f(2) が確実に 4 と返すことができなくて、困っているのだ。
そうだね。でも計算機にかける前に、オーダーを出しておく必要なんだよ。計算機は演算にコストがかかるから、前もって結果を推定しないといけないの。だから、元の関数の中身を吟味したいの。
∞と∞を不等号で比較することはできないんだ。
それは事実。∞/∞ は定義されてないよ。知ってるよ。でもさ、数式的にわかっているときに発散具合で、関数自体は比較できるのじゃないの?
④の式を計算機で処理することはできないというあなたの説に反論する為に、WolframAlphaに④の式を計算させるリンクを張ったのだけれども、意図を全く理解してないようだな。
そりゃ、そうだろ。WolframAlpha が数式を表記できなかった誰も使わねえ。アホか。俺は電卓までは否定しないよ。違うってば。オレっちは「制限のあるメモリ(=有限)上では ∞ は定数としか扱えない」から、「数学=計算機科学」ではない、と言いたいの。「反例の反例」で書いたけど、遅延評価のような手法を使うと数学の問題もプログラミングで解けるよ。なんなら、虚数や分数でも Haskell や Ruby を使うとプログラミング上は解けるよ。それは言語製作者がパフォーマンスを落として実現しているだけで、メモリやプロセッサでは直接演算してないのよ。まさかだけど「物理学で小数と分数を同じものとして扱ってはいけない」ことを知らないとかじゃないよね?
ここまではよくわかる。それで物理学と数学的なカオス理論を押す連中が間違っていると思うのが、
二度目の入力の際に手間を惜しみ、初期値の僅かな違いは最終的な計算結果に与える影響もまた小さいだろうと考えて、小数のある桁以降の入力を省いたところ、
ここ。ここが諸悪の根源だ。まず計算機科学の連中が大学に入って最初に引っかかるミスに大御所がひっかっている。たとえば、0.4 - 0.3 は計算機科学では 0.1 じゃない。それは十進法から二進法に変換するという計算機の特性を理解してない人がやるミスだ。嘘だと思ったら、0.4 - 0.3 == 0.1 と C なり Ruby なり Python なり Java なり Haskell なりでやってくれ。ちなみに JavaScript なら 0.4 - 0.3 === 0.1、Lisp族の Clojure は (== (- 0.4 0.3) 0.1)、PHP はちょっと自信がないので省かせてもらう...。浮動演算ユニットがついているプロセッサで IEEE 754 の類をサポートしているなら「偽」となるはずだ。ここでは「桁あふれ」「丸め誤差」なんかは説明しないが、計算機で小数を扱うのは注意が必要ってことだ。閑話休題、つまり計算機で数学や物理学が実数のように小数点を扱うなら 3.0 と 3.1と 3.14 は別物として扱う必要があって、カオス理論の創始者であるローレンツは「有史に残る」ミスを犯した。
結果が大きく異なった。
これは金融界隈のエンジニアたちにとっては、コンピュータが現れてからは悪夢のような形で襲っていて、ゴースト・イン・ザ・シェルの題材にすらなっている「既知の未知」という類のエラーだ。はっきりいうと、大御所にこんなことを言うことは憚れるが、エンジニアだと3年目以降だとしないミスを MIT のエリートがやっているという、なんというか「そりゃ、そうなるだろ」的なミスをしでかした結果なんだよ。例えば、古典物理学だと有効数字のひとつ下の数値は切り上げて四捨五入するというのは教科書的には正しい。だがね、計算機科学だと小数点の扱いは事故の元なんだよ。具体例を出すと「Ruby で円周率を100回掛け合わせる、Ππ(パイパイ、n=100)みたいなことをする。
puts [3.0, 3.1, 3.14].map{|i| 100.times.reduce(i) {|j, k| j *= k + 1}} # 2.7997864633183236e+158 # 2.893112678762268e+158 # 2.930443164939848e+158
もう一度、特に高校の物理をやった人は考えてほしい。数値を切り捨てしないだけで、これだけの差が生じるのだ。そりゃ、ローレンツ大先生も驚くわな。現実世界では起きないような気がするのはなぜか?、と思うじゃん。そこで、わたしはこう思うわけですよ、
とね。だからこそ、
というものを科学する学問があって良いのじゃないかと。つまり、
なのではないかと。
たとえば、RSAの暗号理論は計算機の有限時間内の演算が難しいという特性を使っているわけじゃん。つまり「暗号化されたものは確実に復号できるという特性を持ち、かつ有限時間以内に割り切れる可能性がほぼ無い」という特性を持つことは数学的にも正しく、計算機科学でも成り立つ事実じゃん。SHA-1 がハッシュ暗号として脆弱なのは、異なるファイルで同じハッシュ値を作れることが PoC されたことであって、数学的に脆弱性が解読されたわけじゃないだろ?もし、数学的にこの脆弱性がわかっていたら、もっと早い段階でハッシュの衝突が起きていたと思うのだが、違うのかい?一応は SHA-1 で衝突が起こることは数学的に予期されていたが、これだけハッシュ破りに時間がかかったのだから、有用性はあったとはおもうけどね。
ゲーム業界でプログラマーとしてやっている身から考えを書いてみる。
「私のフォロワーの方にはクリエイターやゲーム関係の方がたくさんいらっしゃると思います。皆様の意見を聞かせていただきたいです。」
https://twitter.com/gamemakerdiary/status/1413185724849954817
ゲーム会社の経理や人事でも、好きなゲームに関わっているということで満足する人もいる。
小規模なゲームをひとりで全部作りたいのか、中規模以上のゲームのどこかを担当したいのかくらいは考えておくべき。
次は専門職。シナリオ、グラフィック、作曲といった専門の教育を受けてないと手も足も出ない分野。
これも解像度を上げると、コンセプトアート、キャラデザイン、ムービー、モデリング、ライティング、UIデザイン、録音、効果音などなど無数に分類される。
ゲーム会社、特にコンシューマゲームのプログラマーとしてやっていくなら、学生時代に身につけている言語や環境よりも、「大規模なものや複雑なものを怖れず学ぶ」資質が大事だと個人的には思っている。
ゲーム開発は、ゲームエンジンやフレームワーク、ライブラリ、APIを多用する。それもネットで検索してもまったく情報がない独自のものだったりする。
そもそもゲーム機はOS自体が普通と違うし。ビルドに使用するツールチェーンもかなり複雑になっていることが多い。
簡単な例でいうと、Visual Studioよりもテキストエディタの方がシンプルで使いやすいと思うタイプは要注意だ。
複雑でも多くの人に支持されているツールは何か良いことがあるはず、と思ってVisual Studioを使いこなす気持ちを持とう。
学生時代の作品もProcessingなどではなくC++で書くべきとか言われるのもこの辺に通ずる。
あとプログラミングに自信がある人で、既存のライブラリは複雑で使いにくいからとオレオレライブラリを作ってしまう人も要注意。
実は俺もそういうタイプなので苦労した。
ゲーム開発は複雑なものをそのまま使わなくてはならない日がいつか必ず来る。
既存の複雑なものを使う能力と言うのは、つまり大量の(英語を含む)ドキュメントを読む能力、大量のソースコードを読む能力でもある。
シンプルで洗練されたコードも素晴らしいが、洗練されたコードをめちゃくちゃ時間かけて書く人よりも
多少いまいちでも手が止まらず書き続けられる能力がある人の方がまわりには多い。
そういう人は、いまいちなコードに何度も手を加えて最終的にはまともなコードにしてしまったりする。
ゲーム全般やゲーム開発に関する知識量は、プログラマーとしても最大の武器だ。
有名なタイトルがどういう特徴を持ったゲームなのか広く知るのには膨大な時間がかかる。ゲーム好きでそのあたりに詳しいだけでも強い。
Unityなどのゲームエンジンに触ったことがある、というのもスキルというより知識の武器という意味合いが強い。
入門書レベルではなく、UniRxとかのプログラムの書き方の根本からくつがえるようなライブラリ経験とか、Unreal Engineのソースコードをいじったことがあるとかレベルなら超強い。
大学のゲームサークルやインディゲーム開発のグループで経験がある人はここが強いように思う。グローバルゲームジャム参加経験者とかも。
それから、ここが一番言いたかった点なのだが、前述の専門職とまたがる知識のあるプログラマーはめちゃくちゃ重宝される。
グラフィックならシェーダーがめちゃくちゃ書けるとか、3DデータやIKを扱った経験があるとか、3Dベクトルや行列演算の数学が得意だとか。MayaやBlenderを使った経験があるだけでも強い。
サウンドならDAWや波形編集ソフトを普段から触っているとか、信号処理に詳しい人。
つまりデザイナーやモデラーや音楽家の気持ちがわかって、その人たちと専門用語で話ができるプログラマーはどこでも食っていける。
あと最近はAIに強い学生もゲーム会社は積極的に採用している。
ひとつの専門知識+プログラミング能力を身につけるのはわりとおすすめの戦略だ。ゲーム開発の全部に詳しい必要は必ずしもない。
CEDECなどのカンファレンスに参加して、どういう知識体系があるのか知って、自分の強みを考えよう。
ほんと、なんていったらいいんだろうな。
〇〇に対してと聞かれたら、〇〇が1だとした場合の割合を考えなくては行けないから、○○を1にするためには〇〇の数そのもので割る必要があるよね。
これとかあまりにもセンスを感じられない説明の仕方というか、「〇〇が1だとした場合」とかいう謎操作を導入するせいで何でそんなことをする必要があるのかという聞く側からすれば余計な問題解決が発生しているし、「〇〇が1だとした場合の割合」といって「割合」の説明に「割合」を使ってるというトートロジーに陥ってるし、謎操作の理由を推定する問題解決をしない限り「○○を1にするためには〇〇の数そのもので割る必要があるよね」とかいう説明の理解には進めないんだよな。
「aのbに対する割合」という言葉は「bの何倍がaですか?」なわけで、a = rbがまず先にあると考えるのが自然だろう。この方程式を解くのに両辺をbで割ってももちろんいいわけだが、そんなものは代数の演算規則が満たす性質に過ぎないわけで、この方程式を解くのにそれを使わなければならないわけではない。数学的な規則は頭の中のイメージや表現したい構造を公理化しただけであって、先にあるのは公理ではなくイメージや構造の方だ。このくらいの簡単な話はわざわざ形式化しなくてもイメージをイメージのまま言語化せずに頭の中で操作して結論を出せるものだ。そのイメージの操作を形式化するのは別の作業だ。いきなり形式から入るのは形式化の訓練を十分に積んでいるから可能なのであって、それは小学生にやらせることではないだろう。