This site is an archive of ama.ne.jp.

ループカウンタに浮動小数点数を

気持ちシリーズの初回は、「ループカウンタに浮動小数点数マンズの気持ちが知りたい」です。ほんとは#ugokiに置きたかった……。

話題にしたいのは、範囲よりも回数に意味を置くループカウンタね。

2016年にもなって、まだこういう問題1やってたんですね。正解は11回。

「なぜ11回だと判るのですか? 市民」
市民の嗜み

いつも思ってるんだけど、「直感で10回だと思って、しかもそう答えた人はプログラミングやめたほうがいいです。正解は11回でした」ってなんの役にも立たなくない?

  1. わざわざ浮動小数点数のループカウンタなんていうバッドプラクティスを持ち出してくるところがクソ。浮動小数点数型変数をループカウンタとして使用しないで。浮動小数点数を使うという無駄な選択肢を記憶に残したくない。
  2. 「は〜なんか小数だと1回多くなるんやな。よっしゃ覚えた! 次は間違わんとこ!」で何も学ばずに終わりそうなところはもっとクソ。この問題についての解説はないらしいし。別に探せばいくらでも出てくるけど、ちょっとそれは違うんじゃないか。

確かに、世の中にはクイズでしか役に立たない知識もあるわけだけど、ITエンジニアのための実務スキル評価サービス2が本番で誰も使わないことをクイズでやってどうするの。

知りたいのは市場価値ではなく、自分のスキルがその企業で求められるか。CodeIQで、企業の第一線のエンジニアによる実践的な問題に挑戦!その企業におけるリアルな評価がわかります。気になるあなたは、まずはトライしてみてください!
CodeIQ|ITエンジニアのための実務スキル評価サービス2

実は求められてるスキルで、本当はみんな実務で使ってるのか?

以下、時系列順の人間です。

↓これ僕です

796508699774763008

796508760617336832

↓こっちはRTしてくれた人です

796510683487580160

796511450260914176

以上、人間でした。

IEEE754についての知識や経験の有無と、これをクソ問題だと思うかどうかは話が別だと思うけど。

10進数を2進数で処理してるところに原因があるんだって示さない限りは、結局学びのないクソ問題のままじゃないのかな。それに、経験したことがあるなら、それこそこんな問題嫌うと思う。

それ、本気で言ってます? 僕に「IEEE754」の話させたら長くなりますよ?
IEEE754ギョーカイに詳しい人

こういう問題好きそうな人たち、Pythonで適当なメソッドに複数回ジェネレータ食わせるのとか好きそう。「1回目と2回目で挙動が違う! これはクイズになるぞ!」とか騒ぐ気がする。いやこれは偏見。

>>> # ルウプの様子
...
>>> f = 0.0
>>> c = 0
>>> while True:
...     f += 0.1
...     c += 1
...     if f >= 1:
...         break
...
>>> f, c
(1.0999999999999999, 11)
>>> # ジェネレイタアの様子
...
>>> seq = (x ** 2 for x in range(10))
>>> list(seq)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> list(seq)
[]
>>> # スコオプの様子
...
>>> x = 3
>>> for x in range(10):
...     pass
...
>>> x + 1
10
>>> #スコオプの様子その2
...
>>> g = 2
>>> def func():
...     g *= g + 1
...
>>> func()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in func
UnboundLocalError: local variable 'g' referenced before assignment

こういうことはするな。上手いことやろうね。

直感では分からない技巧プログラミング、中学生が好きそう。魔法みたいだから。みんなも魔法好きですよね。僕も実務で使わない限りでは好きです。


  1. https://twitter.com/codeiq_moffers/status/795762793676881921 (浮動小数点数をループカウンタに使用した際に、ループ回数が直感よりも1回大きくなるという旨の問題が出題されていました) 

  2. https://codeiq.jp/