Ruby 初心者スレッド Part 61 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/08/25(金) 15:59:11.22ID:HsL9LVKJ
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
Ruby on RailsについてはWEBプログラミング板で

前スレ
Ruby 初心者スレッド Part 60
https://mevius.2ch.net/test/read.cgi/tech/1493398918/

るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/

Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/

逆引きRuby
http://www.namaraii.com/rubytips/
2017/10/20(金) 21:15:16.18ID:fTxZK5d3
昔rubyの本を読んだ時はさっぱり判らなかったけど、
perlとpythonが判った後で読んだら全部最初から知ってる感じになるな
2017/10/20(金) 21:41:20.58ID:4/l8vBn9
大クラスでもメソッドは
粒度が細かい方が良いと思う
526デフォルトの名無しさん
垢版 |
2017/10/21(土) 02:31:25.02ID:KRuC/jyb
枝分かれと繰り返しで素数判定プログラム書く課題出て適当にやってたらそれっぽいものができちゃったんだけど、なんで出来たの分からないから助けて

ソースは以下

def prime(n)
if n==0 || n==1 || n<0 then return 'Not Defined' end
i=2
while n%i>0 do
if i==n-1 then return 'true' end
i=i+1
end
return 'false'
end
527デフォルトの名無しさん
垢版 |
2017/10/21(土) 02:44:37.46ID:KRuC/jyb
>>526
ソース3行目にこれ付け加えて考えてください
if n==2 then return 'true' end
2017/10/21(土) 02:52:38.24ID:DH1cG8CY
>>526
素数とはもともとそういうものだからとしか言えん
いや確かめてないけど
やり方通りに作ったのならそりゃ書いたとおりに動くよ
2017/10/21(土) 03:42:48.43ID:W+SO0xqJ
>>526

def prime(n)
return 'Not Defined' if n < 2
!(Range.new(2, n - 1).map{ |e| n % e }.include?(0))
end

Rubyっぽくないコードだったんで短く書き直してみた
2017/10/21(土) 06:35:15.86ID:/5Z1bcnO
メモ化しろ。
つまり、答え(素数)をキャッシュする

11 を、[ 2, 3, 5, 7 ]の順番で割って、割り切れなければ、11は素数だろ。
まあ、正確には、11を、[ 2, 3 ]で割って、割り切れなければ素数だが

つまり、√11 までの素数で割って、割り切れなければ素数
2017/10/21(土) 07:34:26.85ID:6mSBZ2Ul
>>523
主義なんかないだろ。
文字列かバイナリかは扱いの違いでしかないし、クラスによってはかなり細かいしな。
2017/10/21(土) 07:57:33.68ID:QO4PPX4g
>>529
> !(Range.new(2, n - 1).map{ |e| n % e }.include?(0))
(2...n).none? { |e| n % e == 0 }
2017/10/21(土) 09:06:12.98ID:8VGNYjri
存在しない配列やハッシュに値を入れようとしたら、
初期化して入れてくれればいいのに
534デフォルトの名無しさん
垢版 |
2017/10/21(土) 11:05:59.68ID:zW3TQJM1
>>530
なるほど…もう一回考えてみるわ

>>529
書き直してくれたのは感謝するし今後に役立つからありがたいけど、今回は基本的な演算の他には『枝分かれと繰り返し』しか使えないんだ
そういう課題ってことだ
2017/10/21(土) 13:58:53.09ID:AGKxZ0DW
>>531
大クラス主義についてはmatzやko1が話してる

http://www.atmarkit.co.jp/news/200712/25/ruby.html

> まつもと 1.8にもEnumeratorとGeneratorという2つの似たようなライブラリが
> あったんですけど、それが1.9ではEnumeratorに統一され、組み込みになりました。
> ここら辺、ああ、Rubyはやっぱり“大クラス主義”だなって思いますね。
>
> ――大クラス主義とは?
>
> 笹田 似たような機能のものを大きなクラスにまとめるという方針です。
> たくさんあると覚えるのも大変だし、使い分けられないから、まとめちゃう。
2017/10/21(土) 16:41:36.24ID:fsyriQnf
言語の設計と言語の使い方は別だ

クラス毎にファイルをわけたり、多機能クラスをシンプルなクラスにわけたりするのを勧めたのは、
エラー表示が効果的になる言語の使い方の話だ
分ってると思うけどそれ外にも、ワンライナーや関数型等の書き方で使いこなせるようになっている
2017/10/21(土) 18:01:16.00ID:ZBz0JWdz
>>536
だよね〜
用途に応じた設計しないとね
2017/10/21(土) 18:33:01.23ID:AGKxZ0DW
Ruby自体が大クラス主義だから利用者も大クラス主義であるべきだとは俺も思ってないよ
だからといって過剰な程にクラスを派生しまくるのは、型を束縛しないダックタイピングということもあって、
利便性が下がるんじゃないかなーとも思ってる

そりゃStringとHashとThreadが1つのクラスになっていたら発狂するけどね
2017/10/21(土) 21:09:41.23ID:6mSBZ2Ul
>>535
流れでたまたまそう思っただけなんじゃないかなあ。
ポリシーがあってないような連中だろ。w
2017/10/21(土) 21:20:09.28ID:QO4PPX4g
>>539
教条主義的なポリシーなんて要らないというポリシーなんじゃね?w
541デフォルトの名無しさん
垢版 |
2017/10/22(日) 00:40:32.24ID:kM4Rb+14
まだID変えて自演しとんのか
542デフォルトの名無しさん
垢版 |
2017/10/22(日) 01:31:42.03ID:dJ6mfyJW
大クラス主義の話になったところで
じゃあみんな具体的に
どれくらいの大きさのクラスにしてる?

目安は一クラスあたり何行?
2017/10/22(日) 02:36:33.83ID:sDdgCD4Q
多くても500行ぐらいだろうな。
1000行いったら嫌悪感が出る
2017/10/22(日) 03:14:27.15ID:yCjESUvF
俺の場合はクラスの大きさに目安はないな
100行に満たないものもあれば1000行を超えるものもあるし
それよりもメソッド(Cなら関数)があまり長くならないように気をつけてる

具体的には80文字×25行のスクリーンからはみ出ないくらい
なんちって
2017/10/22(日) 03:14:46.78ID:rLFHcAK9
目安はサンディメッツルール
2017/10/22(日) 11:15:50.70ID:1YBr+HPt
深いネストのifがあって、Cだったら { に対応する } に飛べば範囲が判るけど、
rubyだとどうするの?
547名無しさん@そうだ選挙に行こう! Go to vote!
垢版 |
2017/10/22(日) 11:21:48.06ID:ammmliXf
>>546
rubynに限らず、エディターのプラグインで、対応するブラケットに飛ぶのが有る。
2017/10/25(水) 22:01:25.02ID:EQUdIXJ1
何も見ずに書けるくらいに慣れた言語はRubyが初めてで便利に使ってたんだけど、最近JavaというかKotlinやってた
んで戻ってきた

インスタンス変数が名前だけでアクセスし放題なのってすげえ便利だけどすげえ邪悪だな!
行く前はなんとも思わなかったけど@hogeとか生であちこち書いてあるとなんか不安になるようになったぞ!
2017/10/25(水) 22:17:30.49ID:aatZ8FSF
要はattrでゲッターセッター使いまくりってことだよね
Rubyは便利だけどそれが時にかえって落とし穴になる
2017/10/25(水) 22:17:41.41ID:J7YSmtyq
railsの前からruby使いで今でもrails何それな人っているんだろうか
2017/10/25(水) 22:22:21.34ID:Okq57FT4
このスレにはWinでRuby使ってる絶滅危惧種がちらほら生息しているみたいだから割といるんじゃないかな
2017/10/25(水) 22:34:52.93ID:J7YSmtyq
winでperlだとactiveperlが定番だけど、rubyだと何だろう
2017/10/25(水) 23:12:44.96ID:0GYD+24d
>>548
インスタンス変数はコンストラクタで必ず初期化するようにすれば
他の言語とそう変わらないと思う
2017/10/25(水) 23:26:24.82ID:6l1ALuPm
>>550
perlから浮気して半年しないうちにrailsが騒がれた
railsの情報はたまに見るけど未だに使ったことがない
2017/10/25(水) 23:37:36.75ID:SowBE9iE
>>553
インスタンス変数を直で使う可能性がわりと残ってるということ自体がキモいというのはあるにはある
それだと「いんすたんすへんすうはつかわないでください」と利用マニュアルやらコーディング規約やらに赤字で書くのと変わらんしな
2017/10/25(水) 23:40:57.81ID:bjMRduYA
winでrubyだけどUnicode引数が扱えないのと
パスにUnicodeが混じると動かないのは治った?
2017/10/25(水) 23:47:10.89ID:0GYD+24d
>>556
そんくらい自分で試せよ
558デフォルトの名無しさん
垢版 |
2017/10/26(木) 00:04:52.44ID:1jsCLZfy
>>548
>>553
インスタンス変数の宣言が不要って部分のこと?
それはコンストラクタで初期化すればいんじゃないの
2017/10/26(木) 00:27:50.55ID:Bn4jQy1s
kotlinはインスタンス変数を直接作れないし触れない
同名のセッターとゲッター経由でのみアクセスする
Rubyでいうとこのattr_accessorだけしか存在しない状態

まあ他の言語の話はどこまでも広がるから程々に
2017/10/26(木) 00:44:34.86ID:+U1JRDPb
インスタンス変数を直接使うよりattr_readerとかattr_accessorを経由するようにしてるなあ
主にタイポ対策として
2017/10/26(木) 00:52:35.48ID:1jsCLZfy
@で直接インスタンス変数を使うか
アクセサを経由するかってことか

クラス内なら直接使ってもいいと思う
クラス外からアクセサを使う方が問題
2017/10/26(木) 01:37:32.31ID:bdhLTBwb
>>556
すべてのOS・言語で、
ユーザー名・PC名・パスなどのシステム要件には、半角英数字しか使うな。

誰も日本語ではテストしていないし、すべてのアプリでテストしていないから

半角空白も使うな。
「a b」などは、2つの引数に扱われてしまうから、バグる

Unicode の4バイト文字などには、多くのアプリが対応していない。
例えば、中国の地名の「深せん」の「せん」は、TeraPad では対応していない

こういうアプリが一杯ある。
特に、圧縮・解凍アプリでは、日本語のパスは使えない
2017/10/26(木) 01:51:18.80ID:1RkkpTof
>>559
通常はプロパティのみで実体の変数にアクセスする場合に特別なキーワードを使う
https://kotlinlang.org/docs/reference/properties.html#backing-fields

>>560
privateなattr_accessor/attr_writerを用意するより
@fooのほうがインスタンス内部の状態にアクセスしてるのが直感的に見えるから個人的には好みかな
2017/10/26(木) 01:57:55.82ID:1RkkpTof
>>562
今どきUnicodeのパス名くらいはテストしてるだろ
半角スペースもちゃんとクウォート対応して作ってればいい話
コマンドラインで書く時に少し面倒になるくらい
2017/10/26(木) 07:56:59.67ID:BUcDTzfg
ディレクトリツリーを再帰処理したときにディレクトリ名に“[]{}”があって
Dir.glob(File.join(subdir,"*")) # subdir = "photo[2017]"
てな感じでハマった
2017/10/26(木) 08:30:22.65ID:Bn4jQy1s
globは昔からへなちょこだよ
入ってるファイル名がglob安全だと事前にわかってるディレクトリにしか使ったらだめだよ
567デフォルトの名無しさん
垢版 |
2017/10/26(木) 11:34:08.16ID:v4GCj7LM
同意せざるを得ない
568デフォルトの名無しさん
垢版 |
2017/10/28(土) 05:14:14.61ID:3gpZJih/
winのRubyで日本語できないとか言ってる奴いるけど、
UTF16Nの文字コードも知らないで適当にやってるからじゃないの?
569デフォルトの名無しさん
垢版 |
2017/10/28(土) 11:08:15.45ID:YrbVG7kU
原因は一つだけじゃない
エンコ間違いを文字化けと言ってしまうくらい
知識が貧弱すぎる
2017/10/28(土) 11:16:36.37ID:xCMEGXaW
正確には、エンコードの推測間違いが文字化け
571デフォルトの名無しさん
垢版 |
2017/10/28(土) 11:19:57.77ID:YrbVG7kU
それも違うよ
本来文字化けは通信回線のエラーで発生するものを指してた
2017/10/28(土) 11:56:59.11ID:outOme0N
まず、環境変数やコマンドラインオプションの -E で utf-8 を指定しないと、ARGVがutf-8にならないので
正確なコマンドライン引数を取得できない*バグ*がある。
さらに、ディレクトリのファイル一覧を取得する時に、encodingオプションを指定してutf-8にしないと、
ユニコードのファイル名を取得できないという*バグ*がある。
作ってる人たちは仕様だと思ってるが、こんなの誰も嬉しくないし、単なるバグ。
だからrubyinstaller2の人も-Eutf-8をデフォルトにしようとした
ソースコードがデフォルトでutf-8の時代に、何でこんなことになってるのか理解しがたい
でもそれ以外のことは相当windowsのために頑張ってくれている
pythonよりマシでnode.jsより劣ってる
2017/10/28(土) 17:18:37.05ID:GkEAGE6K
windowsならしょうがないね
2017/10/28(土) 17:41:59.12ID:yTnVd91+
根本的にスクリプトのパスをUnicodeで扱ってないから、スクリプトにlocaleで表せないUnicodeの文字が含まれるだけで実行できない糞仕様
575デフォルトの名無しさん
垢版 |
2017/10/29(日) 15:18:20.54ID:jMcUbzmZ
やり方知らないだけじゃないの?
2017/10/29(日) 18:20:39.60ID:cEiLc8+m
やろうと思えばできる、とデファクトがデフォルトではない、との間には深くて深い溝が
2017/10/30(月) 07:27:16.07ID:Jvh4uG2g
え、できるの? どうやるの? 教えて
2017/10/31(火) 08:42:53.03ID:23Zr0FFS
なるほど
http://magazine.rubyist.net/?preRubyKaigi2017-01
に挙がってるRuby3.0の三つの課題って
なんというか、C言語ですらクリアしてるような・・・なんだろう、なんで今更
そんな、プログラミングの最黎明期まで時間を戻して修正しなければならない事態って一体
2017/10/31(火) 10:22:53.85ID:qfHwvl41
型を持たないから難しんじゃねーの?
2017/10/31(火) 10:54:16.58ID:0YDRSLxm
Rubyはレジスタ利用できないから30年遅れてるとか喚いてた人と同じ人かな
2017/10/31(火) 11:27:56.74ID:3dsXrBDq
下手にRuby本体をいじるより、TypeScriptみたいなものを目指して欲しい
Matzの発表を見ると、中途半端な実装で終わりそうだから
2017/10/31(火) 11:41:18.35ID:f3HKFkZK
Rubyはクラス定義自体が動的で、それを悪用したメタプログラミング(笑)とかいうハックが横行しているから静的解析でなんとかするのは無理がある
Rails界隈も含めて現実的にまともに役立つものにするにはTypeScriptみたいな後付け方式しかないだろうけど、
「型書きたくないでござる」(笑)に真っ向から反するのであり得ないだろうね
2017/10/31(火) 11:46:12.10ID:23Zr0FFS
>>580
俺が言ってるわけじゃなくて、Ruby界隈の人が言ってるんだよ
君の文章も借りて平たく言うと
Rubyは実行速度が遅くて、静的型が無くて、並列実行が無くて
(何十年かは知らないが) 遅れてるから
Ruby3.0で上記3つをなんとかしたい
って事でしょ
いや実際問題ないんだったら、Ruby3.0の目玉になんかするかね
2017/10/31(火) 12:02:14.47ID:qfHwvl41
Javascriptみたいに
strictって文頭につければ厳しくチェックできるように
typeって文頭につければ型をつけれるようにとか出来ればいいな
2017/10/31(火) 12:37:58.97ID:f3HKFkZK
>>584
付けるならソースファイルじゃなくてクラスに対してだと思う
Rubyの場合、型付けをどうするかよりも、そもそも型というものをどう定義するかが問題
Rubyのクラス定義ってクラスの静的な構造を表してるんじゃなくて、メモリ上にクラスを定義する手続きなんだよ
実行してみないとどんなクラスになるかが分かんないの
2017/10/31(火) 15:23:54.17ID:CDGz4c1c
ここは初心者スレなので初心者に役立つ会話をしようね
リアルで話し相手がいないレス乞食が常駐してるとうざいよ
2017/10/31(火) 18:39:39.63ID:HaPb6HyZ
Rubyのバージョンを上げるんじゃなくて、別の言語をまた作るべきだな

何か言語を使っていると、こうだったらもっと楽なのにというネタがいろいろ溜まってきて、
それを解決した言語が現れる
それを使っているとまたネタが溜まってくる、というサイクルで進化していくもので、
それはバージョンアップで対応できるような内容ではないのが普通
2017/10/31(火) 21:16:56.30ID:23Zr0FFS
まぁはっきり言ってそれは無理だね
言語のシェアみりゃ分かるが、昔からある言語が未だに強い
その言語を使うしかない(他にない)、ってぐらい追い込まないと
新規の言語が広まるのは無理(Swiftとか)

特にRubyの場合は今の一般的な常識でまともな言語に作り直したら
C#やJavaとそう変わりない物が出来上がるだけで、だったらC#やJava使えば?ってなる
これはちょうど、新たに希望の党を作って民進党のリベラルを排除して
自民党と何が違うのかよくわからなくなって、だったら実績のある自民党で良いじゃん、な
希望の党みたいなもの

逆に今のRubyをどんどん改良していけばよいかと言われると、これも民進党と同じでジリ貧
C#みたいに互換性を維持しつつ新しい機能を取り入れまくって進化している言語もあるが
Rubyがそうなれなかったのは、最初の一歩が既におかしかったから
今頃、静的型がどうのこうの言ってるのは最初に犯した過ちを今まで引きづってて
2020年のオリンピックまでにはRuby3.0で云々言ってるわけだが
逆に間違えたからこそ、一部の狂信者に支持されてここまで来たわけで
マトモにしたらJava、C#、C++などのメジャー言語とガチンコになるし、狂信者も付かない
押すも引くも、結局どうにもならんということ
2017/10/31(火) 21:36:49.59ID:7Ixc7xPG
もちろん新規言語がそう簡単に広まるわけないが
Rubyが登場したときにも昔の言語はあったわけで

自由に選択できても広まったし
今でも囲い込みされてるSwiftより
言語ランキングで上位だったりする

政治の比喩を持ち出して印象操作してるけど
ScalaとかGoとか新言語どんどん出てきて
JavaやC#ほどじゃないけどそれなりに使われてるから
むしろ昔より新言語が使われてる位だと思う
2017/10/31(火) 21:41:41.86ID:kBfCDZdZ
LLスレから追い出された連中が相手してもらえると思って来てるからな
彼らは別にRubyを使えるわけじゃないから厄介だ
2017/10/31(火) 21:49:47.48ID:23Zr0FFS
>自由に選択できても広まったし
>今でも囲い込みされてるSwiftより
>言語ランキングで上位だったりする

どうでもよいことだが、それは昔からある言語の方が
新規の言語より強いという裏付けにしかなってないのでは?
新たに言語を作れば今のRubyのポジションは捨てて0からなわけで
今の時代に何の後ろ盾もない状態で新たに言語作ったって
2017/10/31(火) 22:02:16.15ID:HaPb6HyZ
どんな時代なんだ?
2017/10/31(火) 22:04:27.90ID:7Ixc7xPG
>>591
>昔からある言語の方が
>新規の言語より強いという
>裏付けにしかなってないのでは?

「昔からある言語」も昔は
「新規の言語」だったんだよ

もし常に昔の言語の方が強かったら
永久に世代交代しないで
FortranとかLispがずっと主流になってるはずだろ?
2017/10/31(火) 22:23:05.12ID:23Zr0FFS
時代背景を全く考慮しなければそうなるね
2017/10/31(火) 22:39:42.30ID:HaPb6HyZ
だから、かつては受け入れられた新しい言語が今は受け入れられない時代背景を説明しろ
2017/10/31(火) 22:55:05.06ID:kGPpeMmk
>>594
時代背景を考えると、今の言語なんて
まだまだ未発達なので、今の言語は新しい言語に
追い抜かれる運命だよ

そりゃそうだね。建築なんて何千年前からあるんだって話だから
597デフォルトの名無しさん
垢版 |
2017/11/01(水) 01:37:44.29ID:nt6bNFBd
やっほー
discordrbについて聞きたいんだけどこのスレでいいんかな
2017/11/01(水) 02:02:23.05ID:kQ1wt9JW
>>597
>>1を見てみ?
質問・要望・雑談・頃しの以来までなんでもゑるかむだよ
俺はもう練るけど那!
2017/11/01(水) 02:19:40.62ID:Z130aY0S
>>596
それは今の主流言語がさらに進化するだけ
いくつが理由がありそうだけど、みんなそんなに言語に飢えてないし
(おおむね満足している、というか供給過多)
光るアイデアを持った新たな言語が生まれても
メジャー言語がパクれば終わりだし、皆がそれを望んでる
何か光るものを見出しても
それだけでその言語を使おうということにはならない

仮に新しい言語を作るにも、今時は求められるものが高すぎるので
個人では手に負えないし、そもそも個人で作った言語など
昔から存在していて実績があるとかでもない限り、誰も使わん

他、既存の言語の資産が、C言語が登場した当時と比べて
というか比べられないほど凄いことになってる
世界中のプログラマがひたすら書きまくったから

一例としてLinuxのカーネルのソースコードの行数の推移

1991年 0.01 約 10,000 ユーザー数1人(開発者)
1992年 0.96 約 40,000
1994年3月14日 1.0.0 176,250
1995年3月 1.2.0 310,950
1996年6月9日 2.0.0 N/A
1997年 2.1.0 約 800,000
1999年1月25日 2.2.0 1,800,847
2001年1月4日 2.4.0 3,377,902
2003年12月17日 2.6.0 5,929,913
2008年 2.6.x 約 10,000,000
2011年7月21日 3.0 14,646,952
2012年1月 3.x 約 15,000,000
2015年8月 4.2 約 20,000,000
2017/11/01(水) 02:42:46.97ID:Z130aY0S
建築がどうのこうの言ったって建築に互換性は関係ないしな
セキスイだろうがダイワだろうが、基本的にどうでもよい
車もそうだし、というか、ほとんどの物は自由競争の名のもとに
メーカー間の互換性を気にしなくてもよいようになってるんだが
(ハードウェア業界はわりと規格をきっちりやる)
ソフトウェアだけは互換性の壁が異常
この辺、なにか
フォトショップのデータを山のように持ってればフォトショップを使い続けるしかないし
MSOfficeのデータを山のように持ってればMSOfficeを使い続けるしかない
値段は大手企業の良心にかかってるというか、不当に値段を吊り上げられても、割と買うしかない
パチもんもあるけど、互換性が完璧ではないしな
まさかRubyでPythonのコードが走るわけないし
2017/11/01(水) 07:50:12.58ID:uQFQAfJE
説得力が全くない
602デフォルトの名無しさん
垢版 |
2017/11/01(水) 17:44:59.02ID:gYykKPjL
3DCG目的で、答えが同じになる浮動小数点を含んだ別々の計算で、
結果にズレのない同じ数値になるようにするにはどうしたらいいの?
2017/11/01(水) 17:46:43.92ID:K6DgRYf4
>別々の計算

式が違うって意味なら結果が変わっても仕方ない
何桁まで使うかを自分で決める
2017/11/01(水) 17:48:34.39ID:K6DgRYf4
あと

>浮動小数点を含んだ

ここもちょっとあいまいだな
BCDとかを除外するのか使ってもいいのか
いまいちどっちともとれなくもないこともない
605デフォルトの名無しさん
垢版 |
2017/11/01(水) 19:13:42.89ID:kQ1wt9JW
>>602
浮動小数点数の計算誤差なんて、値と式によっていくらでも蓄積されるから、割り切りが必要だぞ
極端な例をCで言うけど、floatの精度で一致させるつもりでdoubleを使っても一致しないことも出てくる

rubyだと標準ライブラリに含まれるbigdecimalライブラリがあるけど、
これも無理数だと計算誤差が出てくるわけだし
https://docs.ruby-lang.org/ja/latest/library/bigdecimal.html
2017/11/01(水) 20:07:42.50ID:uQFQAfJE
Rationalクラスなら誤差出ない
2017/11/01(水) 20:47:39.78ID:kQ1wt9JW
>>606
えっ、まじで?
3DCGって言ってるから座標計算とかじゃないの?
sin cos sqrt使うとRationalってFloatになるんじゃ
2017/11/01(水) 20:53:14.66ID:uQFQAfJE
マクローリン展開で
2017/11/01(水) 21:13:10.79ID:mbpKs61j
マクローリン展開でどうやって誤差なしで計算するのw
2017/11/01(水) 21:16:19.51ID:uQFQAfJE
真の値である必要は無い
二通りの計算が同じになって欲しいんでしょ

どんなコンピュータ持ってきても円の面積すら誤差なしで計算できないぞ
2017/11/01(水) 23:37:46.94ID:Oby+I+5u
宇宙船でも、円周率の誤差のせいで、目的地にたどりつけないから、double 型を使ってる

float だと精度が足りないから
2017/11/02(木) 00:32:00.52ID:iVcltcyL
>>610
次の命題Pが真であるといっているんだよね?

命題P
任意のマクローリン展開可能な関数f:R -> Rに対して
適当な次元で切り上げたものをgとすると、
任意のr, r' ∈ Q に対して
g(r) = g(r') => f(r) = f(r')

しかしr'の任意の近傍Dに対して
g(r) = g(r') => f(r) = f(r') (r ∈ D)
は、自明なfを除き明らかに成り立たない。
よってその論理はおかしいよ。
613デフォルトの名無しさん
垢版 |
2017/11/02(木) 00:50:02.65ID:c5hpxlFZ
>>594
具体的な提案持たずにこき下ろしたいだけの奴はつまらん。
単なる背乗りダネ。
614デフォルトの名無しさん
垢版 |
2017/11/02(木) 04:58:30.09ID:S5CQdMtg
誤差のあるPC1
誤差のあるPC2
PC1とPC2で同じ結果になったら合格です!!!
615デフォルトの名無しさん
垢版 |
2017/11/02(木) 06:00:37.83ID:RnqR+Yur
10.0 , 10.0 , 0.0 の座標にある頂点に、
Z軸を軸とした45度の回転を正負どちらの方向に加えても、きっちりX軸やY軸にのってくれなくて、
頂点が同じ座標に重なるはずの別々のポリゴンの計算でも、ずれる可能性がある

これってライブラリ使うだけで解決できそう?
それともライブラリ+αで自分で何か実装しないといけないの?
2017/11/02(木) 07:10:11.88ID:nD35tXd7
>>612
じゃあ、sin xをx - x^3/6で近似して、
有理数演算した結果を比較してみれ
2017/11/02(木) 07:34:22.72ID:0ATVgqBG
>>615
浮動小数点計算の同値判定は差の絶対値が微小値未満かどうかでやれ、というのが
よく言われることかな
もちろん計算誤差の蓄積の問題もあるけどこれ以上は計算機科学でも勉強しないと
いけないかもしれない

というか浮動小数点の話はスレ違いかと
2017/11/02(木) 07:50:56.95ID:vQ98pS2c
Ruby遅い

速いと言われるPythonやLuaに手を出す

言われるほど速くならない

Ruby(+ネイティブコードの拡張ライブラリ)に戻ってくる ←イマココ
2017/11/02(木) 09:47:21.54ID:XIufFp9a
なんでPython?
いまならGoだろ
2017/11/02(木) 10:19:56.68ID:iVcltcyL
>>616
だからそれじゃ意味ないでしょ
結局それはsinの引数xが等しいかを比較してるのと殆ど同じなんだよ
x' = x + ε (|ε| << |x|) の時、その方法では正しく比較できないことは自明だし
更にsin(π/3) と sin(2π/3) などの比較も同様
2017/11/02(木) 19:25:21.94ID:vQ98pS2c
唐突にコンパイラ言語が出てくるのはなぜなのか
2017/11/02(木) 20:37:04.48ID:rd1E1A0+
まあ速度でRubyからPythonに変えようとするのは無知としか言いようがない
623デフォルトの名無しさん
垢版 |
2017/11/03(金) 01:16:26.72ID:zxns9zZh
>>602
rational使え。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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