Discuss Scratch

r4010
Scratcher
16 posts

演算について話しあうトピック

kazu-014916 wrote:

(略)

はい。ちなみにですがscratchの計算の仕方上、ほんの少しだけ誤差が出る時があります

[答 v] を [1] にする
([切り下げ v] \( (b) \)) 回繰り返す
[答 v] を ((a) * (答)) にする
end
もし <<((b) を (1) で割った余り) = [0]> ではない> なら
[答 v] を ((答) * (([10^ v] \(((b) を (1) で割った余り)\)) * ([log v]\( (a) \)) )) にする

end
これなら誤差が減ると思います。

Last edited by r4010 (Aug. 26, 2021 23:19:02)

inoking
Scratcher
1000+ posts

演算について話しあうトピック

r4010 wrote:

((0.1) * (0.1))
が0.01ではないのが致命的
これと同じですが時々出てくる話題です。

機械計算に便利な2進数に置き換えて実行しているため生じる誤差です。
2進数で正確に表現できる数字(例:0.125)なら浮動小数点でも有効桁の範囲内で正確に計算できます。

これは Scratch に限った話ではありません。
ブラウザの「開発者ツール」の「コンソール」でもすぐ試せます。
IEEE 754 はデファクトスタンダード(事実上の標準)と言ってもよいようなものです。

この誤差が、例えば電卓ソフトなら致命的ですが
プログラミング言語はソフトを作るための道具にすぎません。
道具の特性を理解して使うのは、使用者側(電卓ソフトの例えで言うと、電卓ソフトの作成者)の責任です。
つまり、Scratch で言うと、ブロックを使ってプログラムを作っている我々ユーザーの責任です。
r4010
Scratcher
16 posts

演算について話しあうトピック

inoking wrote:

(略)

この誤差が、例えば電卓ソフトなら致命的ですが
プログラミング言語はソフトを作るための道具にすぎません。
道具の特性を理解して使うのは、使用者側(電卓ソフトの例えで言うと、電卓ソフトの作成者)の責任です。
つまり、Scratch で言うと、ブロックを使ってプログラムを作っている我々ユーザーの責任です。
なるほど。よくわかりました。ありがとうございます。

Last edited by r4010 (Aug. 26, 2021 10:20:29)

nakonoesa
Scratcher
22 posts

演算について話しあうトピック

少し質問なんですがcosってなんですか?
ahorashi
Scratcher
35 posts

演算について話しあうトピック

cosθは直角三角形の形をしていてθ°の角を持っている楽器のトライアングルみたいなものの直角のところを右下にして、θ°の角度を左下にして置いた時(⊿←こんな感じの時)の(_の部分の長さ÷/の部分の長さ)がcosです。
伝わらなかったらすいません。語彙力無いので()
追記:逆でした()

Last edited by ahorashi (Aug. 27, 2021 04:52:00)

r4010
Scratcher
16 posts

演算について話しあうトピック

角B=θ、角C=90ºとなる直角三角形ABCの、
BC
AB
がcosθ
takumaiq
Scratcher
80 posts

演算について話しあうトピック

r4010 wrote:

((0.1) * (0.1))
が0.01ではないのが致命的

僕はあまり詳しくないのですが、こういうことではないでしょうか。

機械は計算を2進数で計算しています。
例えば、5+6=11であれば、5→101 6→110 2進数で101+110=1011 1011→11
2進数は、2の冪乗の和で整数を表すというものですから、当然小数も2の冪乗の和で表します。
例えば、0.75=0.5+0.25→0.11 このように表されます。
小数になりますと、2進数表記が有限の長さで表せなくなることがあります。
それが0.1の例です。
0.1を2進数表記すると、0.1=0.0625+0.03125+0.00390625+0.001953125+…=0.000110011… (違ったらすいません)
所謂「循環小数」になります。
10進数を用いる我々からすると、循環小数を分数に直さないまま正確に計算することは不可能です。
それと同じで、2進数を使う上に、小数第〇位(64とかだったかな?)までしか小数を扱う事の出来ないコンピュータは、
2進数で言う0.000110011…×0.000110011…、即ち10進数の0.1×0.1を正確に計算することはできないのです。

このようなことではないかと思います。長文失礼致しました。
ejimasa-sab
Scratcher
4 posts

演算について話しあうトピック

こんにちは。ほぼ初のディスカッションフォールです。演算自体わからないのですが演算って何ですか?
定義 演算って何?(演算てなんなんだああああああ)
LiQiXian
Scratcher
57 posts

演算について話しあうトピック

もし <<((何らかの数) を (1) で割った余り) = [0]> ではない> なら
[君は少数だ!] と言う
end
これがそこそこ便利。
StrongPeanut
Scratcher
1000+ posts

演算について話しあうトピック

LiQiXian wrote:

もし <<((何らかの数) を (1) で割った余り) = [0]> ではない> なら
[君は少数だ!] と言う
end
これがそこそこ便利。
「少数」ではなくて「小数」。

もし <((何らかの数) を (1) で割った余り) = [0]> なら
[君は整数だ!] と言う //整数判定
でなければ
[君は小数だ!]と言う //小数・分数判定
end
便利ですね。
ringo2go
Scratcher
100+ posts

演算について話しあうトピック

#327
簡単に言うと計算でしょうか。演算のための記号?を演算子と言いますす。
演算子一覧↓
http://wisdom.sakura.ne.jp/programming/perl/perldata1.html
mikan__s
Scratcher
71 posts

演算について話しあうトピック

あの、sinやcosやasin(三角関数系のやつとか平方根とか絶対値とか…)はわかるんですけど、lnやlog、e(ネイピア数(?)っていうの)が分かりません。
ahahahahanoha
Scratcher
46 posts

演算について話しあうトピック

演算についてのトピックに移動して再投稿
scratchの演算についてしっかり学ぶことができる本、サイトを教えてください。
scratch専門の本、サイトじゃなくてもいいです。 (やって覚えろとか言わないでください。演算苦手なんです)
Es-2
Scratcher
1000+ posts

演算について話しあうトピック

演算ブロックの使い方を知りたいのならこの記事が参考になると思います。
ahahahahanoha
Scratcher
46 posts

演算について話しあうトピック

参考にします。ありがとうございます。

Last edited by ahahahahanoha (Sept. 17, 2021 01:50:37)

kuriboushi1
Scratcher
3 posts

演算について話しあうトピック

nの2乗+n=x
という式で、xがわかっているとき、nを求めるにはどういうコードを書けばいいですか?
StrongPeanut
Scratcher
1000+ posts

演算について話しあうトピック

#335
(((x) - (n))の [平方根 v]:: operators)
https://scratch-mit-edu.ezproxyberklee.flo.org/projects/573819827/

Last edited by StrongPeanut (Sept. 23, 2021 00:04:16)

dannkuru
Scratcher
100+ posts

演算について話しあうトピック

#335
解説を作ってみました
すっ飛ばして最終的な結果だけ言うとn= (-1±√1+4x)/2です。(詳しくは上に書いたやつを見てください。)

Last edited by dannkuru (Sept. 23, 2021 00:56:30)

00giri
Scratcher
1000+ posts

演算について話しあうトピック

#336
nを求めるということはnは使えません。

#335
n²+n-x=0 を解の公式に代入して、
(((-1) + (((1) + ((4) * (x)))の[平方根 v]::operators)) / (2))
(((-1) - (((1) + ((4) * (x)))の[平方根 v]::operators)) / (2))
で2つの解を求めることができます。
kuriboushi1
Scratcher
3 posts

演算について話しあうトピック

00giri wrote:

#336
nを求めるということはnは使えません。

#335
n²+n-x=0 を解の公式に代入して、
(((-1) + (((1) + ((4) * (x)))の[平方根 v]::operators)) / (2))
(((-1) - (((1) + ((4) * (x)))の[平方根 v]::operators)) / (2))
で2つの解を求めることができます。

ありがとうございます!

Powered by DjangoBB